Я нахожу это %~dp0
очень полезным и часто использую его, чтобы сделать мои командные файлы более переносимыми.
Но сам лейбл мне кажется очень загадочным ... Что ~
делает? Означает ли dp
это диск и путь? Имеет ли 0
см %0
, путь к пакетному файлу , который включает в себя имя файла?
Или это просто странный ярлык?
Я также хотел бы знать, является ли это документированной функцией, или что-то склонное к устареванию.
batch-file
Себастьян Гриньоли
источник
источник
%~dp0
. Обычно я нахожу, что лучшие хиты относятся к контенту на SO.Ответы:
призвание
в командной строке выдает справку об этом синтаксисе (который также можно использовать вне FOR, это просто место, где можно найти помощь).
Существуют разные буквы, такие как
f
«полный путь», «d
буква диска», «p
путь», и их можно комбинировать.%~
является началом для каждой из этих последовательностей, а числоI
обозначает, что он работает с параметром%I
(где%0
полное имя пакетного файла, как вы и предполагали).источник
I
. Я должен использовать0
вместоI
. Я не знаю, пропустил ли я что-то или что-то еще, но просто говорю людям.I
является заполнителем для индекса переменной.0
= вызывающий файл,1
= аргумент № 1,2
= аргумент № 2 и т. д ...(Во-первых, я хотел бы рекомендовать этот полезный справочный сайт для пакетной: http://ss64.com/nt/ )
Тогда просто еще одно полезное объяснение: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
И более четкая ссылка здесь :
%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
Только что нашел хорошую ссылку для загадочного
~
оператора тильды.%~
Строка называется процентом тильды оператора. Вы можете найти его в таких ситуациях , как:%~0
.:~
Строка называется двоеточием тильды оператора. Вы можете найти это как%SOME_VAR:~0,-1%
.ДОБАВИТЬ 2 - 13:12 7/7/2018
%1-%9
обратитесь к аргументам командной строки. Если они не являются допустимыми значениями пути,%~dp1
-%~dp9
все будут расширены до того же значения, что и%~dp0
. Но если они являются допустимыми значениями пути, они расширятся до своего собственного значения драйвера / пути.Например: (batch.bat)
Прогон 1:
Прогон 2:
источник
Переменная
%0
в пакетном скрипте установлена на имя исполняемого пакетного файла.~dp
Специальный синтаксис между%
и в0
основном говорит расширить переменную ,%0
чтобы показать букву диска и путь, который дает вам текущий каталог , содержащий пакетный файл!Помощь = Ссылка
источник
%0
напрямую в cmd без сохранения файла .bat на локальный жесткий диск?% ~ dp0 раскрывает текущий путь к каталогу запущенного пакетного файла.
Чтобы получить четкое понимание, давайте создадим командный файл в каталоге.
с содержанием:
Когда вы запустите его из командной строки, вы увидите такой результат:
источник
Еще один совет, который может очень помочь, заключается в том, что для установки текущего каталога на другой диск
%~d0
сначала нужно будет использовать егоcd %~dp0
. Это изменит каталог на диск с командным файлом, а затем перейдет в его папку.В качестве альтернативы для #oneLinerLovers, как отметил @Omni в комментариях,
cd /d %~dp0
будет изменен как диск, так и каталог :)Надеюсь, это кому-нибудь поможет.
источник
cd
имеет встроенный параметр, который будет переключать как диск, так и папку:cd /d %~dp0
/d
аргумент полезен, но он заслуживает публикации в качестве альтернативного ответа кандидата, а не комментария к этому. Спасибо, что указали на это, хотя, я не знал об этом :)Отличный пример из переносной оболочки Strawberry Perl:
не уверен, что отрицательный 1 делает там сам, но это работает удовольствие!
источник
Пример был бы хорош - вот тривиальный
в нем перечислены только расширения каждого файла в текущей папке
для более полезных комбинаций переменных (также перечисленных в предыдущем ответе) из приглашения CMD выполните команду:
HELP FOR
которая содержит этот фрагментМодификаторы могут быть объединены для получения составных результатов:
источник