Адаптировано с разрешения автора со страницы. Пакетные файлы - символы побега на Сайт сценариев Роба ван дер Вуде .
TLDR
Экранирование символов командного файла в Windows (и DOS) является сложным :
Так же, как и вселенная, если кто-нибудь когда-либо сделает полностьючтобы понять Batch, язык будет немедленно заменен бесконечно более странной и более сложной версией самого себя.Это, очевидно, случалось, по крайней мере, один раз раньше;)
Знак процента
%
может быть экранирован как %%
- "Может не всегда требоваться [чтобы бытьэкранированный] в строках в двойных кавычках, просто попробуйте "
Как правило, используйте каретку
Эти символы" не всегда требуются [для экранирования] в строках в двойных кавычках, но это не повредит ":
'
"требуется [для экранирования] только в FOR /F
" субъекте "(то есть в скобках), , если не используется backq
"
`
"требуется [для экранирования] только в FOR /F
" субъекте "(то есть в скобках), , если используется backq
"
Эти символы "обязательны [для экранирования] только в FOR /F
" субъекте "(то есть в скобках), даже в строках в двойных кавычках":
Восклицательные знаки двойного побега при использовании отложенного расширения переменной
!
должны быть экранированы ^^!
, когда активна задержка расширения переменной.
Двойные двойные кавычки в find
Поиск шаблонов
"
→ ""
Использование обратной косой черты в findstr
Шаблонах регулярных выражений
Также
Роб прокомментировал этот вопрос далее (по электронной почте):
Что касается ответа, я боюсь, что хаос еще хуже, чем понимает оригинальный плакат: требования к экранированию скобок также зависят от того, находится строка внутри блока кода или нет!
Я полагаю, что автоматизированный инструмент может простовставьте каретку перед каждым символом, затем удвойте все знаки процента - и все равно не получится, если строка будет заключена в двойные кавычки!
Мехкроме того, отдельные программы отвечают за синтаксический анализ своих аргументов командной строки, поэтому некоторые из экранирований, требуемых, например, для sed
или ssed
, могут быть связаны с конкретными программами, вызываемыми в пакетных сценариях.