Использование пакетного эха со специальными символами
Это может быть очень легко, но для него не было ответов по сети. Я хочу, чтобы эхо XML строки через пакет в файл, но он неправильно понимает тег закрытия XML для перенаправления " > ". Строка выглядит следующим образом:
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
Есть ли способ дать подсказку парсеру, чтобы он не интерпретировал специальную строку? Я использовал двойные кавычки, но также записывает их в файл! После echo файл должен выглядеть так:
<?xml version="1.0" encoding="utf-8" ?>
Ответы
Ответ 1
Вы можете избежать метасимволов оболочки с помощью ^
:
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
Обратите внимание, что поскольку echo
является встроенной оболочкой, он не соответствует обычным соглашениям о цитировании, поэтому просто цитирование аргумента приведет к выводу кавычек вместо их удаления.
Ответ 2
другой метод:
@echo off
for /f "useback delims=" %%_ in (%0) do (
if "%%_"=="___ATAD___" set $=
if defined $ echo(%%_
if "%%_"=="___DATA___" set $=1
)
pause
goto :eof
___DATA___
<?xml version="1.0" encoding="utf-8" ?>
<root>
<data id="1">
hello world
</data>
</root>
___ATAD___
rem #
rem #
Ответ 3
Одним из простых решений является использование замедленного расширения, поскольку это не изменяет никаких специальных символов.
set "line=<?xml version="1.0" encoding="utf-8" ?>"
setlocal EnableDelayedExpansion
(
echo !line!
) > myfile.xml
EDIT: Другое решение - использовать исчезающую цитату.
Эта техника использует знак кавычки, чтобы указать специальные символы
@echo off
setlocal EnableDelayedExpansion
set ""="
echo !"!<?xml version="1.0" encoding="utf-8" ?>
Трюк работает, так как в фазе специальных символов ведущая кавычка в !"!
сохранит остальную часть строки (если нет других кавычек).
И в фазе замедленного расширения !"!
будет заменено содержимым переменной "
(одна цитата - это юридическое имя!).
Если вы работаете с отключенным замедленным расширением, вы можете использовать цикл FOR /F
.
for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>
Но поскольку кажется, что это немного раздражает, вы также можете создать макрос.
set "print=for /f %%^" in ("""") do echo(%%~""
%print%<?xml version="1.0" encoding="utf-8" ?>
%print% Special characters like &|<>^ works now without escaping
Ответ 4
Чтобы использовать специальные символы, такие как ' > ' в Windows с эхом, перед этим вам нужно поместить специальный escape-символ.
Например
echo A->B
не будет работать, так как ' > ' должен быть экранирован '^':
echo A-^>B
Смотрите также escape-последовательности.
![введите описание изображения здесь]()
Существует короткий командный файл, который печатает базовый набор специального символа и их escape-последовательности.
Ответ 5
Способ вывода символа >
заключается в том, чтобы добавить его с ^
escape-символом:
echo ^>
будет печатать просто
>
Ответ 6
Ответ от Джои не работал на меня.
После выполнения
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
Я получил эту ошибку
bash: синтаксическая ошибка около неожиданного токена ` > '
Это решение работало для меня:
echo "<?xml version=\"1.0\" encoding=\"utf-8\">" > myfile.txt
См. также http://www.robvanderwoude.com/escapechars.php