usando lote de eco com caracteres especiais

Isso pode ser muito fácil, mas não havia respostas para isso na rede. Eu quero ecoar uma linha XML via lote em um arquivo, mas não entende a tag de fechamento XML para o redirecionamento “>”. A linha é a seguinte:

echo  > myfile.xml 

Existe alguma maneira de dar uma dica ao analisador de lote para não interpretar uma seqüência especial? Eu usei aspas duplas, mas também as grava no arquivo! O arquivo deve ficar assim após o eco:

  

Você pode escaping de metacaracteres de shell com ^ :

 echo ^ > myfile.xml 

Note que, como echo é um shell embutido, ele não segue as convenções usuais sobre cotação, então, apenas citando o argumento, irá gerar as cotações em vez de removê-las.

outro método:

 @echo off for /f "useback delims=" %%_ in (%0) do ( if "%%_"=="___ATAD___" set $= if defined $ echo(%%_ if "%%_"=="___DATA___" set $=1 ) pause goto :eof ___DATA___    hello world   ___ATAD___ rem # rem # 

Para usar caracteres especiais, como ‘>’ no Windows com eco, você precisa colocar um caractere de escape especial antes dele.

Por exemplo

 echo A->B 

não funcionará, já que ‘>’ tem que ser escapado por ‘^’:

  echo A-^>B 

Veja também as seqüências de escape . insira a descrição da imagem aqui

Existe um pequeno arquivo de lote, que imprime um conjunto básico de caracteres especiais e suas seqüências de escape.

Uma solução fácil é usar a expansão atrasada, pois isso não altera nenhum caractere especial.

 set "line=" setlocal EnableDelayedExpansion ( echo !line! ) > myfile.xml 

EDIT: Outra solução é usar uma cotação de desaparecimento .

Essa técnica usa uma aspa para citar os caracteres especiais

 @echo off setlocal EnableDelayedExpansion set ""=" echo !"! 

O truque funciona, pois na fase de caracteres especiais, a aspa principal irá preservar o resto da linha (se não houver outras citações).
E na fase de expansão atrasada, o !"! Será substituído pelo conteúdo da variável " (uma simples citação é um nome legal!).

Se você estiver trabalhando com a expansão atrasada desativada, poderá usar um loop FOR /F

for /f %%^" in ("""") do echo(%%~"

Mas como o parece ser um pouco chato, você também pode construir uma macro.

 set "print=for /f %%^" in ("""") do echo(%%~"" %print% %print% Special characters like &|<>^ works now without escaping 

O caminho para o output > character é prefixar com ^ escape character:

 echo ^> 

vai imprimir simplesmente

 > 

A resposta de Joey não estava funcionando para mim. Depois de executar

  echo ^ > myfile.xml 

Eu recebi este erro bash: erro de syntax perto token inesperado `> ‘

Esta solução funcionou para mim:

  echo "" > myfile.txt 

Veja também http://www.robvanderwoude.com/escapechars.php

Por que não usar aspas simples?

 echo '' 

saída