Кавычку не нужно экранировать, чтобы повторить ее, но символы, появляющиеся после 1-й кавычки, будут считаться заключенными в кавычки, даже если закрывающей кавычки нет, поэтому конечное перенаправление не будет работать, если кавычка не экранирована.
Просто перенаправить эхо одной цитаты в файл без экранирования - просто переместите перенаправление на передний план.
>file.txt echo "
Полный ответ немного сложен, потому что система котировок является конечным автоматом. Если в данный момент «выключено», то следующая цитата включает его, если кавычка не экранирована как ^"
. Когда машина котировок «включена», следующая цитата всегда будет отключать ее - экранировать цитату невозможно.
Вот небольшая демонстрация
@echo off
:: everything after 1st quote is quoted
echo 1) "this & echo that & echo the other thing
echo(
:: the 2nd & is not quoted
echo 2) "this & echo that" & echo the other thing
echo(
:: the first quote is escaped, so the 1st & is not quoted.
:: the 2nd & is quoted
echo 3) ^"this & echo that" & echo the other thing
echo(
:: the caret is quoted so it does not escape the 2nd quote
echo 4) "this & echo that^" & echo the other thing
echo(
:: nothing is quoted
echo 5) ^"this & echo that^" & echo the other thing
echo(
А вот и результаты
1) "this & echo that & echo the other thing
2) "this & echo that"
the other thing
3) "this
that" & echo the other thing
4) "this & echo that^"
the other thing
5) "this
that"
the other thing
Добавление
Хотя невозможно избежать закрывающей кавычки, можно использовать отложенное расширение, чтобы либо скрыть закрывающую кавычку, либо противодействовать ей с помощью фантомного повторного открытия кавычки.
@echo off
setlocal enableDelayedExpansion
:: Define a quote variable named Q. The closing quote is hidden from the
:: quoting state machine, so everything is quoted.
set Q="
echo 6) "this & echo that!Q! & echo the other thing
echo(
:: The !"! variable does not exist, so it is stripped after all quoting
:: has been determined. It functions as a phantom quote to counteract
:: the closing quote, so everything is quoted.
echo 7) "this & echo that"!"! & echo the other thing
Результаты
6) "this & echo that" & echo the other thing
7) "this & echo that" & echo the other thing