utilisation de l'écho discontinu avec des caractères spéciaux

Cela peut-être vraiment facile, mais il n'y avait pas de réponses sur le net. Je veux faire écho à une ligne XML via le transfert par lots dans un fichier, mais il comprend mal La balise de fermeture XML pour la redirection ">". La ligne est la suivante:

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

y a-t-il un moyen de donner une indication à l'analyseur de lots pour ne pas interpréter une chaîne spéciale? J'ai utilisé des guillemets, mais il les écrit dans le fichier ainsi! Le fichier devrait ressembler à ceci après echo:

<?xml version="1.0" encoding="utf-8" ?>
53
demandé sur Amir Zadeh 2011-09-05 17:10:39

7 réponses

, Vous pouvez échapper à shell métacaractères avec ^ :

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

notez que puisque echo est un shell intégré, il ne suit pas les conventions habituelles concernant les citations, donc simplement citer l'argument affichera les citations au lieu de les supprimer.

78
répondu Joey 2011-09-06 07:08:54

une autre méthode:

@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 # 
16
répondu walid2mi 2011-09-05 13:28:59

une solution facile est d'utiliser l'expansion retardée, car cela ne change pas les caractères spéciaux.

set "line=<?xml version="1.0" encoding="utf-8" ?>"
setlocal EnableDelayedExpansion
(
  echo !line!
) > myfile.xml

EDIT : une Autre solution est d'utiliser un la disparition de la citation .

cette technique utilise un guillemet pour citer les caractères spéciaux

@echo off
setlocal EnableDelayedExpansion
set ""="
echo !"!<?xml version="1.0" encoding="utf-8" ?>

l'astuce fonctionne, comme dans la phase des caractères spéciaux le principal guillemet dans !"! préserver le reste de la ligne (si il n'y a pas d'autres citations).

Et dans la phase d'expansion retardée le !"! sera remplacé par le contenu de la variable " (une seule citation est un nom légal!).

si vous travaillez avec une extension retardée désactivée, vous pouvez utiliser une boucle FOR /F à la place.

for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>

Mais, comme le semble être un peu gênant, vous pouvez aussi construire un macro.

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

%print%<?xml version="1.0" encoding="utf-8" ?>
%print% Special characters like &|<>^ works now without escaping
15
répondu jeb 2011-12-04 10:47:37

pour utiliser des caractères spéciaux, tels que " > " sur les fenêtres avec écho, vous devez placer un caractère d'échappement spécial avant.

par exemple

echo A->B

ne fonctionnera pas car ' > 'doit être échappé par'^':

 echo A-^>B

Voir aussi séquences d'échappement . enter image description here

il y a un petit fichier batch, qui imprime ensemble de caractère spécial et de leurs séquences d'échappement.

15
répondu orbitcowboy 2015-11-23 21:25:57

la façon de produire le caractère > est de le préparer avec le caractère ^ escape:

echo ^>

s'affichera simplement

>
10
répondu Aleks G 2011-09-05 13:29:50

la réponse de Joey ne marchait pas pour moi. Après l'exécution

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

j'ai eu cette erreur bash: erreur de syntaxe près du jeton inattendu ' > '

Cette solution a fonctionné pour moi:

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

Voir aussi http://www.robvanderwoude.com/escapechars.php

2
répondu Competo 2014-03-27 14:13:03

pourquoi ne pas utiliser un seul devis?

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

sortie

<?xml version="1.0" encoding="utf-8" ?>
0
répondu fangxing 2018-02-05 03:22:55