В cmd \ не выходит " . Вот быстрое доказательство и объяснение:
Запустить echo "" & echo 1 . (& - это специальный символ в cmd, left & right означает, что бегите left затем бегите right .) Мы видим, что как echo "" и echo 1 выполнены успешно.
Далее запустите echo " & 1234 . Мы можем видеть, что результат " & 1234 . Это потому, что открытие " не было закрыто, и, следовательно, все после него интерпретируется как строка, включая специальный символ & .
Запустите echo "\" & 1234 .
Если \ действительно экранирует следующее " , открытие " не будет закрыто, а символы & 1234 будут интерпретироваться как часть строки.
Если \ не удается избежать следующего " , то следующее " закроет строку и & 1234 не будет интерпретироваться как часть строки.
В выводе мы не видим & 1234 интерпретируемый как часть строки. Это доказывает, что \ не удалось сбежать " .
Так что же "ускользает " в кавычках для передачи аргументов? Хотя ^ будет работать вне кавычек (это легко проверить с помощью echo ^" & echo 1), он не экранирует кавычки внутри кавычек.
Действительно, как мы можем заставить что-то простое, например, echo """ & echo 1 работать?
^ Символ? ...Нет, echo "^"" & echo 1 выводит "^"" , а не """ .
А как насчет " себя? ...Нет, echo """" & echo 1 выводит """" , а не """ .
Дело в том, что нет ничего , что убежит " кавычки для передачи аргументов. Вы можете размышлять над этим в течение пары лет и не найти решения. Это лишь некоторые из ограничений, присущих сценариям cmd.
Тем не менее, хорошая новость заключается в том, что вы, скорее всего, никогда не столкнетесь с ситуацией, когда вам нужно это сделать. Конечно, нет никакого способа заставить echo """ & echo 1 работать, но это не так уж важно, потому что это просто надуманная проблема, с которой вы, вероятно, никогда не столкнетесь.
Например, рассмотрим runas . Он работает нормально, без необходимости убегать " в кавычках, потому что runas знал, что это невозможно сделать, и сделал внутренние корректировки, чтобы обойти его. runas изобрел свои собственные правила синтаксического анализа (runas /flag "anything even including quotes") и не интерпретирует CMD аргументы обычным способом. Официальная документация для этого специального синтаксиса довольно скудна (или вообще отсутствует). Помимо /? и help , это в основном методом проб и ошибок.