Что делает одиночная цитата в пакетных файлах Windows?

Недавно я запустил команду в windows cmd с одинарными кавычками в ней и обнаружил, что она не ведет себя так, как я ожидал.

Из попыток google "однократная оцифровка окон и двойная цитата" я нашел несколько статей, в которых люди спрашивали о том, как окна обрабатывают одиночные кавычки, такие как двойные кавычки, и о том, как bash рассматривает одиночные кавычки и двойные кавычки по-разному. Однако я не мог легко найти явное объяснение того, что одиночные кавычки делают в командах пакетных команд Windows.

Итак, что делают одиночные кавычки в пакетных файлах Windows? Выполняют ли они какие-либо функции кавычек вообще?

Ответы

Ответ 1

Одиночные кавычки вообще не используются процессором команд cmd.exe, за исключением того, чтобы заключить команду для запуска в инструкции FOR/F:

for /f %%A in ('someCommand') do ...

Или указать строку для обработки FOR/F, если используется опция USEBACKQ:

for /f "usebackq" %%A in ('some string') do ...

Все остальные цитируемые обработчики cmd.exe выполняются с двойными кавычками. Однако есть служебные программы Windows (внешние команды), такие как WMIC, которые используют одиночные кавычки для собственных целей цитирования. Но нет стандарта - каждая утилита свободна иметь собственную интерпретацию одинарных кавычек.

Непоследовательные правила escape и quote, используемые cmd.exe и различными утилит командной строки, часто затрудняют поиск правильного синтаксиса, необходимого для любой ситуации.

Вот несколько важных замечаний об использовании двойных кавычек " с cmd.exe.

  • Двойные кавычки - это простой конечный автомат. Первый " поворачивается", затем он выключается.

  • Все специальные символы обрабатываются как литеральные значения при цитировании, за исключением символов % и <newLine>, и все ! символ, если включено замедленное расширение, и символ ^ если замедленное расширение включено, и ! также появляется где-то внутри линии.

  • Если цитирование отключено, вы можете избежать " как ^" чтобы предотвратить его включение. Но как только вы укажете, вы не сможете избежать закрытия. " Самый следующий " всегда будет выключаться.