відносний шлях у сценарії 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.