Что означает %~dp0 и как это работает?
найти %~dp0 очень полезно, и я использую его много, чтобы сделать мои пакетные файлы более портативными.
но сам ярлык кажется мне очень загадочным... что такое ~ делаешь? делает dp средний диск и путь? делает ли 0 смотрите %0 путь к пакетному файлу, который включает имя файла?
или это просто странная метка?
Я также хотел бы знать, если это документированная функция, или что-то склонное быть устаревшим.
7 ответов:
вызов
for /?в командной строке дает справку об этом синтаксисе (который может быть использован снаружи, потому что это просто место, где можно найти помощь).
кроме того, замена для ссылки на переменные были улучшены. Теперь вы можете использовать следующие дополнительные функции синтаксис:
%~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty stringмодификаторы могут быть объединены, чтобы получить составные результаты:
%~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names only %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output lineв приведенных выше примерах %I и PATH мочь заменить другими допустимыми значениями. Синтаксис %~ завершается допустимым Для имени переменной. Комплектация верхний регистр имена переменных, такие как %I, делают его больше читаемый и избегает путаницы с модификаторы, которые не дело чувствительный.
есть разные буквы, которые вы можете использовать, как
fдля "полный путь",dдля буквы диска,pна пути, и они могут быть объединены.%~начало для каждой из этих последовательностей и рядIобозначает, что он работает на параметр%I(где%0полное имя пакетного файла, как вы и предположили).
(во-первых, я хотел бы рекомендовать этот полезный справочный сайт для партии: http://ss64.com/nt/)
тогда просто еще одно полезное объяснение:http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
переменная %~dp0
переменная %~dp0 (это ноль) при ссылке в Windows пакетный файл будет расширен до dРив письмо и path этой партии файл.
переменные %0 - % 9 относятся к параметрам командной строки пакета файл. %1-%9 см. аргументы командной строки после имени пакетного файла. %0 относится к самому пакетному файлу.
если вы следуете символу процента ( % ) с символом Тильды (~), можно вставить модификатор(ы) перед номером параметра, чтобы изменить путь к переменной. Д модификатор распространяется на диск буква и модификатор p расширяются до пути параметр.
пример: Допустим, у вас есть каталог на C: называется bat_files, и в этом каталоге находится файл с именем example.летучая мышь. В этом случае, %~dp0 (объединение модификаторов d и p) будет расширяться до C:\bat_files.
проверить этой статье для полного объяснения.
кроме того, проверьте эта ветка форума.
и более четкая ссылка от здесь:
%CmdCmdLine%вернет всю командную строку, как передано в CMD.EXE
%*возвращает остаток командной строки, начиная с первого аргумента командной строки (в Windows NT 4, % * также включает все начальные пробелы)
%~dnвернет букву диска %n (n может варьироваться от 0 до 9), Если %n-допустимый путь или имя файла (нет UNC)
%~pnвернет каталог %n, если %n-допустимый путь или имя файла (без UNC)
%~nnбудет возвращать имя файла только %N, если %n является допустимым именем файла
%~xnвозвращает расширение файла только %n, если %n-допустимое имя файла
%~fnвозвращает полный путь %n, если %n-допустимое имя файла или каталогдобавить 1
нашел хорошую ссылку для таинственная
~оператор Тильда.The
%~строка называется процентов Тильда оператора. Вы можете найти его в таких ситуациях, как:%~0.The
:~строка называется Тильда оператора. Вы можете найти его как%SOME_VAR:~0,-1%.ДОБАВИТЬ 2 - 1:12 ВЕЧЕРА 7/6/2018
%1-%9смотрите в книге Command аргументов строка. Если они не допустимые значения: путь,%~dp1-%~dp9все будет расширяться до того же значения, что и%~dp0. Но если они are допустимые значения пути, они будут расширяться, чтобы собственные водителя/пути.например: (партия.летучая мышь)
@echo off @echo ~dp0= %~dp0 @echo ~dp1= %~dp1 @echo ~dp2= %~dp2 @echo onзапустите 1:
D:\Workbench>batch arg1 arg2 ~dp0= D:\Workbench\ ~dp1= D:\Workbench\ ~dp2= D:\Workbench\Run 2:
D:\Workbench>batch c:3\a.exe e:\abc\b.exe ~dp0= D:\Workbench\ ~dp1= c:3\ ~dp2= e:\abc\
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
переменная
%0в пакетном скрипте задается имя исполняемого пакетного файла. Элемент~dpспециальный синтаксис между%и0в основном говорит, чтобы расширить переменной%0показать букву диска и путь, который дает вам текущий каталог, содержащий пакетный файл!
еще один совет, который бы очень помог, - это установить текущий каталог в другой диск можно было бы использовать
%~d0во-первых, тогдаcd %~dp0. Это изменит каталог на диск пакетного файла, а затем перейдите в его папку.альтернативно, для #oneLinerLovers, как указал @Omni в комментариях
cd /d %~dp0изменится как диск, так и каталог:)надеюсь, это поможет кто-то.
%~dp0 расширяется до текущего пути к каталогу запущенного пакетного файла.
чтобы получить четкое представление, давайте создадим пакетный файл в каталоге.
C:\script\test.летучая мышь
содержание:
@echo off echo %~dp0когда вы запустите его из командной строки, вы увидите такой результат:
C:\script\
отличный пример из портативной пусковой установки Strawberry Perl:
set drive=%~dp0 set drivep=%drive% if #%drive:~-1%# == #\# set drivep=%drive:~0,-1% set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%Не уверен, что отрицательный 1 делает там сам, но это работает удовольствие!
пример был бы хорош - вот тривиальный
for %I in (*.*) do @echo %~xIв нем перечислены только расширения каждого файла в текущей папке
для более полезных комбинаций переменных (также перечисленных в предыдущем ответе) из командной строки выполните:
HELP FORкоторый содержит этот фрагментмодификаторы можно объединять для получения сложных результатов:
%~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names only %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output line
Comments