J'écris un fichier batch où j'ai besoin de sortir une chaîne contenant '!' vers un autre fichier. Mais quand je fais écho à cette chaîne dans un autre fichier, elle supprime "!" de la sortie.
Par exemple: Entrée:
set LINE=Hi this is! output
echo !LINE!>>new_file.txt
La sortie dans new_file.txt est:
Hi this is output
De plus, si l'entrée est
set LINE=Hello!! this is output!!
echo !LINE!>>new_file.txt
Sortie dans new_file.txt:
Hello
Par conséquent, il saute le! (Point d'exclamation) de la sortie vers le nouveau_fichier. Si j'utilise% LINE%, il affiche simplement "l'écho est activé" dans le fichier de sortie.
Veuillez suggérer un moyen de résoudre ce problème.
Si vous avez activé l'expansion différée et souhaitez afficher un point d'exclamation, vous devez y échapper.
L'échappement des points d'exclamation ne nécessite aucun, un ou deux carets, selon l'emplacement.
@echo off
set test1=Test1!
setlocal EnableDelayedExpansion
set test2=Test2^^!
set "test3=Test3^!"
echo !test1!
echo !test2!
echo !test3!
La différence entre !var!
et %var%
dans les blocs est expliqué à batch DOS: pourquoi mes commandes set ne produisent-elles rien de stocké?
Une explication de l'analyseur par lots peut être trouvée à Comment les scripts d'analyse des commandes Windows (CMD.EXE)?
Il semble que vous ayez appelé SETLOCAL EnableDelayedExpansion
quelque part plus haut dans le code. Jetez un oeil ici pour voir quels en sont les effets.