использование пакетного Эха со специальными символами
Это может быть очень легко, но не было никаких ответов для него через сетку. Я хочу повторить XML-строку через пакет в файл, но он неправильно понимает закрывающий тег XML для перенаправления ">". Строка выглядит следующим образом:
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
есть ли способ дать подсказку пакетному парсеру не интерпретировать специальную строку? Я использовал двойные кавычки, но он также записывает их в файл! Файл должен выглядеть так после echo:
<?xml version="1.0" encoding="utf-8" ?>
7 ответов:
вы можете избежать оболочки метасимволов с
^
:echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
обратите внимание, что с
echo
это встроенная оболочка, которая не соответствует обычным соглашениям о цитировании, поэтому просто цитирование аргумента будет выводить кавычки вместо их удаления.
другой способ:
@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 #
одним из простых решений является использование отложенного расширения, так как это не меняет никаких специальных символов.
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
чтобы использовать специальные символы, такие как '>' в Windows с echo, вам нужно поместить перед ним специальный escape-символ.
например
echo A->B
не будет работать, так как '>' должен быть экранирован '^':
echo A-^>B
см. также escape-последовательности.
есть короткий пакетный файл, который печатает базовый набор специальных символов и их последовательностей.
ответ от Джоуи не работал для меня. После выполнения
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