использование пакетного Эха со специальными символами


Это может быть очень легко, но не было никаких ответов для него через сетку. Я хочу повторить XML-строку через пакет в файл, но он неправильно понимает закрывающий тег XML для перенаправления ">". Строка выглядит следующим образом:

echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml

есть ли способ дать подсказку пакетному парсеру не интерпретировать специальную строку? Я использовал двойные кавычки, но он также записывает их в файл! Файл должен выглядеть так после echo:

<?xml version="1.0" encoding="utf-8" ?>
7 53

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-последовательности. enter image description here

есть короткий пакетный файл, который печатает базовый набор специальных символов и их последовательностей.

способ вывода > символ, чтобы добавить его с ^ escape-символ:

echo ^>

будет печатать просто

>

ответ от Джоуи не работал для меня. После выполнения

  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

почему бы не использовать одинарную кавычку?

echo '<?xml version="1.0" encoding="utf-8" ?>'

выход

<?xml version="1.0" encoding="utf-8" ?>