Як ви можете отримати каталог запущеного сценарію та використовувати його у файлі .cmd?
Як ви можете отримати каталог запущеного сценарію та використовувати його у файлі .cmd?
Відповіді:
Раймонд Чен має кілька ідей:
https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573
Цитую тут повністю, оскільки архіви MSDN, як правило, є дещо ненадійними:
Найпростіший спосіб - використовувати
%CD%псевдозмінну. Він розширюється до поточного робочого каталогу.
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory(Звичайно, збереження / відновлення каталогу можна було б зробити легше за допомогою
pushd/popd, але тут справа не в цьому.)
%CD%Трюк зручно навіть з командного рядка. Наприклад, я часто опиняюся в каталозі, де є файл, над яким я хочу працювати, але ... о, мені потрібно перейти до іншого каталогу, щоб виконати цю операцію.
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args(Я люблю використовувати
%_%як змінну середовища для подряпин.)Введіть,
SET /?щоб побачити інші псевдо-змінні, надані процесором команд.
Також коментарі в статті варто відсканувати, наприклад, цей (через WayBack Machine, оскільки коментарі зникли зі старих статей):
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
Це стосується використання% ~ dp0:
Якщо ви хочете знати, де живе пакетний файл:
%~dp0
%0- це ім'я командного файлу.~dpнадає вам диск та шлях вказаного аргументу.
Це еквівалентно шляху сценарію:
%~dp0
Тут використовується синтаксис розширення пакетного параметра. Параметр 0 - це завжди сам сценарій.
Якщо ваш скрипт зберігається в C:\example\script.bat, тоді %~dp0оцінює до C:\example\.
ss64.com містить більше інформації про синтаксис розширення параметра. Ось відповідний уривок:
Ви можете отримати значення будь-якого параметра, використовуючи%, а потім його числове положення в командному рядку.
[...]
Коли параметр використовується для подання імені файлу, тоді можна застосувати такий розширений синтаксис:
[...]
% ~ d1 Розгорніть% 1 лише на букву Диска - C:
[...]
% ~ p1 Розгорніть% 1 до Шляху, наприклад, \ utils \ сюди входить кінцевий термін \, який деякими командами може бути інтерпретований як символ втечі.
[...]
Модифікатори вище можна комбінувати:
% ~ dp1 Розгорніть% 1 лише на букву диска та шлях
[...]
Ви можете отримати назву шляху до самого пакетного сценарію за допомогою% 0, до нього можна застосувати розширення параметрів, тому% ~ dp0 поверне Drive і Path до пакетного сценарію, наприклад W: \ scripts \