Что означает %~dp0 и как это работает?



найти %~dp0 очень полезно, и я использую его много, чтобы сделать мои пакетные файлы более портативными.



но сам ярлык кажется мне очень загадочным... что такое ~ делаешь? делает dp средний диск и путь? делает ли 0 смотрите %0 путь к пакетному файлу, который включает имя файла?



или это просто странная метка?



Я также хотел бы знать, если это документированная функция, или что-то склонное быть устаревшим.

15364   7  

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

    Ничего не найдено.