C’est peut-être très facile, mais il n’ya pas eu de réponse sur Internet. Je souhaite faire écho d'une ligne XML via batch dans un fichier, mais la balise de fermeture XML est mal comprise pour la redirection ">". La ligne est la suivante:
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
est-il possible d'indiquer à l'analyseur de lot de ne pas interpréter une chaîne spéciale? J'ai utilisé des guillemets doubles mais il les écrit également dans le fichier! Le fichier devrait ressembler à ceci après écho:
<?xml version="1.0" encoding="utf-8" ?>
Vous pouvez échapper aux métacaractères Shell avec ^
:
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
Notez que, étant donné que echo
est un shell intégré, il ne suit pas les conventions habituelles concernant la citation. Il suffit donc de citer l'argument pour afficher les guillemets au lieu de les supprimer.
Pour utiliser des caractères spéciaux, tels que '>' sous Windows avec écho, vous devez placer un caractère d'échappement spécial devant celui-ci.
Par exemple
echo A->B
ne fonctionnera pas car '>' doit être échappé par '^':
echo A-^>B
Voir aussi séquences d'échappement .
Il existe un fichier de commandes court qui imprime un ensemble de base de caractères spéciaux et leurs séquences d'échappement.
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 #
Une solution simple consiste à utiliser l’extension différée, car cela ne modifie aucun caractère spécial.
set "line=<?xml version="1.0" encoding="utf-8" ?>"
setlocal EnableDelayedExpansion
(
echo !line!
) > myfile.xml
EDIT: Une autre solution consiste à utiliser un guillemet disparaissant .
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, car dans la phase des caractères spéciaux, le guillemet de tête dans !"!
préservera le reste de la ligne (s'il n'y a pas d'autres guillemets).
Et dans la phase d'expansion retardée, le !"!
sera remplacé par le contenu de la variable "
(une citation unique est un nom légal!).
Si vous travaillez avec une expansion retardée désactivée, vous pouvez utiliser une boucle FOR /F
.
for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>
Mais comme cela semble un peu gênant, vous pouvez également créer une macro.
set "print=for /f %%^" in ("""") do echo(%%~""
%print%<?xml version="1.0" encoding="utf-8" ?>
%print% Special characters like &|<>^ works now without escaping
Pour sortir le caractère >
, vous devez l'ajouter au caractère d'échappement ^
:
echo ^>
imprimera simplement
>
La réponse de Joey ne fonctionnait pas pour moi. Après avoir exécuté
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
Pourquoi ne pas utiliser un seul devis?
echo '<?xml version="1.0" encoding="utf-8" ?>'
sortie
<?xml version="1.0" encoding="utf-8" ?>