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" ?>
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.
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 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
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 .
il y a un petit fichier batch, qui imprime ensemble de caractère spécial et de leurs séquences d'échappement.
la façon de produire le caractère >
est de le préparer avec le caractère ^
escape:
echo ^>
s'affichera simplement
>
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
pourquoi ne pas utiliser un seul devis?
echo '<?xml version="1.0" encoding="utf-8" ?>'
sortie
<?xml version="1.0" encoding="utf-8" ?>