відносний шлях у сценарії BAT


130

Ось моя папка програми на моєму USB-накопичувачі:

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

Я б хотів використовувати run.batдля початку Iris.exe

Я не можу використовувати це: F:/Program/bin/Iris.exeяк ярлик, тому що іноді він не приєднується як привід F:( наприклад, E: або G:)

Що мені потрібно записати у файл bat, щоб працювати, незалежно від букви диска?

Я спробував це у файлі BAT:

"\bin\Iris.exe"

Але це не працює.

Відповіді:


275

Використовуйте це у своєму пакетному файлі:

%~dp0\bin\Iris.exe

%~dp0 розв'язується до повного шляху папки, в якій перебуває пакетний сценарій.


7
Насправді це вирішує щось подібне C:\myDir\\bin\Iris.exe(зверніть увагу на подвійний нахил). Це все ще працює, але залишати зворотну косу рису перед сміттям здається "чистішим"? -> %~dp0bin\Iris.exe.
mozzbozz

8
@mozzbozz Якщо ви можете гарантувати, що %~dp0завжди буде мати зворотний кут нахилу, обидва твердження спрацюють . В іншому випадку безпечнішим є варіант з додатковою косою рисою.
Ansgar Wiechers

4
Гаразд, це справа. Я тестував це лише на двох різних машинах Windows 7, можливо, в інших місцях (XP, Vista oder Windwos 8 -> я не знаю, але: логіка Microsoft, і я не міг знайти жодних документів про це;)). Тим НЕ менше, я виявив , що я повинен був поставити в лапки ( "%~dp0\bin\Iris.exe") , оскільки шлях був пробіл в ньому :) Просто , щоб бути дійсно впевнені , що він працює на кожному комп'ютері.
mozzbozz

1
ви можете переконатися, що SET "scriptdir=%~dp0"в наступному рядку є зворотний нахил IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\". Я бачив випадки, коли подвійний кут нахилу в середині шляху порушує програмне забезпечення.
LogicDaemon

40

Ви можете отримати всі необхідні властивості файлів, скориставшись наведеним нижче кодом:

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:?
)

24

Я виявив, що %CD%дає шлях, з якого був викликаний скрипт, а не шлях сценарію, однак %~dp0дасть шлях самому сценарію.


14

Ви повинні мати можливість використовувати поточний каталог

"% CD%" \ bin \ Iris.exe


1
Це не вдається, коли поточний каталог відсутній Program, це станеться, коли ви двічі клацніть по кнопці run.bat"Провідник". %CD%- поточний каталог %~dp0- це сам каталог пакетного файлу
jeb

5

або bin\Iris.exe (відсутня провідна коса риса - тому що це означає починати прямо з кореня)
або \Program\bin\Iris.exe(повний шлях)


1
bin \ Iris.exe це не працює :( мені не подобається використовувати root, тому що коли-небудь я можу перенести цей dir в інше місце розташування. А що, якщо я запитаю в ОС поточний абсолютний шлях? І я буду використовувати що запустити exe у біні?
користувач2083037

Я припускав, що поточний диск буде накопичувачем USB, а поточна папка \Program- це не так? Ви можете показати це за допомогою простої cdкоманди в рядку, перш ніж спробувати запустити .exe
AjV Jsy

Просто використання відносного шляху не обов'язково спрацює. Шлях буде відносно поточного робочого каталогу, який може відрізнятися від батьківського каталогу run.bat.
Ansgar Wiechers
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.