Я смотрю на командный файл, который определяет следующие переменные:
set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
- Что значит
%~d0
или на%~p0
самом деле значит? - Существует ли набор общеизвестных значений таких вещей, как текущий каталог, диск, параметры скрипта?
- Есть ли другие подобные ярлыки, которые я мог бы использовать?
windows
batch-file
Крис Смит
источник
источник
echo %~dp0
не будет работать в командной строке, только в командном файле. Duh!%~d0
и%~d0%
?echo %~pd0
дает тот же результат, что и эхо%~dp0
(вместо обратного, как ожидалось). Кроме того , значение%0
является различным в зависимости от того , дважды щелкните пакетный файл или запустить его из ЦМД.Они являются расширенными переменными заменами. Они изменяют переменные% N, используемые в пакетных файлах. Очень полезно, если вы в пакетном программировании в Windows.
Вы можете найти выше, запустив
FOR /?
.источник
Да, есть и другие ярлыки, которые вы можете использовать ниже. В вашей команде ~ d0 будет означать букву диска 0-го аргумента.
Поскольку 0-й аргумент является путем к сценарию, он получает букву диска для вас. Вы также можете использовать следующие ярлыки.
Это также можно найти непосредственно в командной строке при запуске CALL /? или ЗА /?
источник
Из анализа имени файла в пакетном файле и других идиом - Real's How-to :
Путь (без диска), где находится скрипт: ~ p0
Диск, на котором находится скрипт: ~ d0
источник
%~s0
полное имя скрипта.Еще один совет, который может очень помочь, заключается в том, что для установки текущего каталога на другой диск
%~d0
сначала нужно будет использовать егоcd %~dp0
. Это изменит каталог на диск с командным файлом, а затем перейдет в его папку.Для #oneLinerLovers,
cd /d %~dp0
будет меняться как диск, так и каталог :)Надеюсь, это кому-нибудь поможет.
источник
pushd %~dp0
, которая без проблем меняет текущий диск, и дает вам дополнительный бонус за возможностьpopd
вернуться к исходному диску / пути позже.%~d0
дает букву диска аргумента 0 (имя скрипта),%~p0
путь.источник
Некоторые ошибки, на которые стоит обратить внимание:
Если дважды щелкнуть командный файл, он
%0
будет заключен в кавычки. Например, если вы сохраните этот файл какc:\test.bat
:Двойной щелчок по нему откроет новую командную строку с выводом:
Но если вы сначала откроете командную строку и вызовете ее непосредственно из этой командной строки, это
%0
будет указывать на то, что вы ввели . Если вы напечатаетеtest.bat
Enter, вывод%0
будет без кавычек, потому что вы ввели без кавычек:Если вы напечатаете
test
Enter, вывод также не%0
будет иметь расширения, потому что вы ввели без расширения:То же самое для
tEsT
Enter:Если вы печатаете
"test"
Enter, вывод%0
будет иметь кавычки (так как вы их напечатали), но без расширения:И наконец, если вы напечатаете
"C:\test.bat"
, результат будет точно таким, как если бы вы дважды щелкнули по нему:Обратите внимание, что это не все возможные значения,
%0
потому что вы можете вызывать скрипт из других папок:Все приведенные выше примеры также будут влиять
%~0
, потому что выходные данные%~0
просто выводятся%0
минус-кавычки (если есть).источник
Этот код объясняет использование символа ~ tilda, что для меня было самым запутанным. Как только я это понял, все становится намного проще для понимания:
источник
Он отображает текущее местоположение файла или каталога, в котором вы находитесь в данный момент. Например; если ваш пакетный файл находится в каталоге рабочего стола, то «% ~ dp0» отобразит каталог рабочего стола. если вы хотите, чтобы он отображал текущий каталог с текущим именем файла, вы можете набрать «% ~ dp0% ~ n0% ~ x0».
источник