jalur relatif dalam skrip BAT

130

Ini folder program saya sendiri di drive USB saya:

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

Saya ingin menggunakan run.batuntuk memulai Iris.exe

Saya tidak bisa menggunakan ini: F:/Program/bin/Iris.exeseperti jalan pintas, karena kadang-kadang tidak dilampirkan sebagai drive F:( misalnya E: atau G:)

Apa yang harus saya tulis di file bat untuk bekerja terlepas dari huruf drive?

Saya mencoba ini di file BAT:

"\bin\Iris.exe"

Tapi itu tidak berhasil.

pengguna2083037
sumber

Jawaban:

275

Gunakan ini dalam file batch Anda:

%~dp0\bin\Iris.exe

%~dp0 menyelesaikan ke path lengkap folder di mana skrip batch berada.

Ansgar Wiechers
sumber
7
Sebenarnya ini memutuskan untuk sesuatu seperti C:\myDir\\bin\Iris.exe(perhatikan double-backslash). Ini masih bekerja tetapi meninggalkan backslash sebelum bin tampaknya menjadi "bersih"? -> %~dp0bin\Iris.exe.
mozzbozz
8
@mozzbozz Jika Anda bisa menjamin bahwa %~dp0akan selalu ada garis miring terbalik kedua pernyataan akan berfungsi. Kalau tidak, yang dengan backslash tambahan adalah varian yang lebih aman.
Ansgar Wiechers
4
Ok, itu intinya. Saya hanya menguji ini pada dua mesin Windows 7 yang berbeda, mungkin berbeda di tempat lain (XP, Vista atau Windwos 8 -> Saya tidak tahu tetapi: Logika Microsoft dan saya tidak dapat menemukan dokumen tentang hal itu;)). Namun, saya menemukan bahwa saya harus meletakkan tanda kutip di sekitarnya ("%~dp0\bin\Iris.exe" ) karena path memiliki spasi di dalamnya :) Hanya untuk benar - benar yakin itu bekerja pada setiap komputer.
mozzbozz
1
Anda dapat memastikan ada backslash dengan SET "scriptdir=%~dp0" dan pada baris berikutnya IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". Saya telah melihat insiden di mana double backslash di tengah jalan merusak perangkat lunak.
LogicDaemon
40

Anda bisa mendapatkan semua properti file yang diperlukan dengan menggunakan kode di bawah ini:

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)
Gaurav Kolarkar_InfoCepts
sumber
24

Saya telah menemukan bahwa %CD%memberi jalan naskah itu dipanggil dan bukan jalan naskah, akan tetapi, %~dp0memberikan jalan naskah itu sendiri.

Sitri
sumber
14

Anda harus dapat menggunakan direktori saat ini

"% CD%" \ bin \ Iris.exe

Johan A.
sumber
1
Ini gagal ketika direktori saat ini tidak Program, ini akan terjadi ketika Anda mengklik dua kali run.batdari explorer. %CD%adalah direktori saat ini %~dp0adalah direktori file batch itu sendiri
jeb
5

baik bin\Iris.exe (tanpa garis miring utama - karena itu berarti mulai dari root)
atau \Program\bin\Iris.exe(jalur penuh)

Ajs Jsy
sumber
1
bin \ Iris.exe tidak berfungsi :( Saya tidak suka menggunakan root, karena suatu hari nanti mungkin saya akan memindahkan direktori ini ke lokasi lain. Dan bagaimana jika saya bertanya dari OS tentang path absolut saat ini? dan saya akan menggunakan itu untuk memulai exe di bin?
user2083037
Saya berasumsi drive saat ini akan menjadi drive USB stick, dan folder saat ini akan \Program- bukankah itu masalahnya? Anda dapat menunjukkannya dengan cdperintah sederhana di baris sebelum Anda mencoba menjalankan .exe
AjV Jsy
Cukup menggunakan jalur relatif tidak akan selalu berhasil. Path akan relatif ke direktori kerja saat ini, yang mungkin berbeda dari direktori induk run.bat.
Ansgar Wiechers