Подтвердить что ты не робот

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

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

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

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

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

Ответ 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