Как записать в файл текст, содержащий двойные кавычки без новой строки - PullRequest
2 голосов
/ 10 октября 2019

Мне нужно записать следующую строку без новой строки в новый файл:

R"(

Я пробовал:

echo|set /p = R"( > ..\web\index.min.html
echo|set /p = R^"( > ..\web\index.min.html
echo|set /p = R\"( > ..\web\index.min.html

Безрезультатно.

Но если я напишу:

echo|set /p = R""( > ..\web\index.min.html

, я получу:

R""(

Две двойные кавычки вместо одной. Как я могу решить мою проблему?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Ваши попытки не удаются, потому что есть (открывающая) кавычка, которая скрывает выражение перенаправления > ..\web\index.min.html от анализатора. Использование "" работает, потому что есть закрытие ", поэтому перенаправление распознается.

Даже обычное экранирование (например, ^", а не \") здесь не помогает, потому что есть канал (|) участвует, который выполняет любую сторону в новом экземпляре cmd, поэтому экранирование уже используется родительским экземпляром, а (правый) дочерний экземпляр получает неоткрытый ".

Следовательно, вам необходимовыполните двойное экранирование, чтобы заставить его работать:

echo/|set /P =R^^^"(> "..\web\index.min.html"

Но если вы избегаете канала, достаточно одного экранирования:

< nul set /P =R^"(> "..\web\index.min.html"

Хотя перемещение выражения перенаправления вперед, как показанов dbenham ' answer , вероятно, лучшее решение для этой проблемы, к которому я бы также обратился. Обратите внимание, что на самом деле нет необходимости в дополнительных кавычках:

< nul > "..\web\index.min.html" set /p =R"(
2 голосов
/ 10 октября 2019

Как правило, лучше и эффективнее использовать <nul set /p =text вместо echo|set /p =text

В приглашении SET / P есть причудливые правила , которые не согласуются между версиями Windows :(

Лучше поместить все перенаправления перед командой, чтобы все символы после = были частью приглашения, за исключением случаев, указанных в правилах.

Вещи, которые являютсяхитрые и / или вызывающие проблемы приводят к пробелам, символам = и кавычкам.

К счастью, кавычки можно решить довольно легко. Либо заключите нужную строку справа от = в кавычках:

<nul >..\web\index.min.html set /p ="R"("

Первая цитата будет удалена, а последняя цитата и все завершающие символы после последней цитаты будут удалены.

Или сделайте вышеупомянутое и добавьте дополнительный набор заключающих цитат вокруг всейконструкция, включая =:

<nul >..\web\index.min.html set /p "="R"(""

Первые две кавычки удаляются, как и последние две кавычки, и все символы после 2-го до lasТ кавычки игнорируются.

Я не рекомендую это, но каждое из следующих также будет работать:

<nul >..\web\index.min.html set /p ="R"(" IGNORED
<nul >..\web\index.min.html set /p "="R"(" IGNORED " IGNORED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...