Есть много проблем для аргументов программы.
Чтобы понять их, вам нужно знать, как анализируется строка.
Сначала анализируется строка с помощью cmd.exe.
Существует много правил (и этапов), но в вашем случае есть только два релевантных.
Каждая кавычка переключает quoted-mode
, в режиме кавычек специальные символы теряют свои special
, что означает
Символ каретки экранирует следующий символ, сама карета будет удалена.
Символ каретки также может экранировать кавычки, чтобы избежать активации режима цитирования.
Это работает только в режиме без кавычек, внутри кавычек каретка теряет свое особое значение.
Обратные косые черты не имеют особого значения для cmd.exe.
Для ваших примеров, cmd.exe будет анализировать их как:
printer.exe arg1 \" ^" arg2
-> printer.exe arg1 \" ^" arg2 --- The caret is inside quotes
printer.exe arg1 ^"arg2
-> printer.exe arg1 "arg2 --- The caret was outside quotes
Вкл. windows каждый program.exe
отвечает за разбиение командной строки на аргументы, несмотря на linux, где оболочка решает, как разбить аргументы.
Следствием для windows программ является:
Полный беспорядок!
Вам необходимо знать правила каждой программы, чтобы знать, как строка разбивается на аргументы.
Существуют программы, в которых есть правила с поддержкой обратной косой черты или двойных двойных кавычек, некоторые с одинарными кавычками, а некоторые без возможности построения произвольных аргументов.
Для некоторых дополнительных объяснений Как работает Windows Командный интерпретатор (CMD.EXE) разбирает скрипты?