batch-file
Échapper des caractères spéciaux
Recherche…
Introduction
Dans toutes les versions de cmd.exe
et DOS
, certains caractères sont réservés à une utilisation spécifique (par exemple, la redirection de commandes). Ce sujet expliquera comment utiliser les caractères spéciaux sans problèmes.
Échapper à l'aide du caret (^)
La plupart des caractères spéciaux peuvent être échappés en utilisant le curseur ( ^
). Regardez l'exemple suivant.
echo > Hi
echo ^> Hi
Cette première commande ne produirait pas > Hi
car >
est un caractère spécial, ce qui signifie rediriger la sortie vers un fichier. Dans ce cas, le fichier est nommé "Hi"
Cependant, dans la deuxième commande, > Hi
sera généré sans aucun problème car le signe d'insertion ( ^
) indique au >
cesser de fonctionner comme commande "rediriger la sortie vers le fichier", maintenant >
est juste un caractère normal.
Voici une liste de caractères spéciaux pouvant être échappés (pris et édités à partir de la page de Rob van der Woude)
Personnage | Résultat échappé | Remarques |
---|---|---|
^ | ^^ | |
Et | ^ & | |
< | ^ < | |
> | ^> | |
| | ^ | | |
\ | ^ \ | |
! | ^^! | Seulement requis lorsque DelayedExpansion est activé |
S'échapper du caret
Les carets peuvent être empilés jusqu’à l’échappement des autres carets, prenez l’exemple suivant.
Contribution | Sortie |
---|---|
^ & | Et |
^ ^ ^ & | ^ & |
^ ^ ^ ^ ^ & | ^^ & |
Note: Les carets en gras sont échappés.
Problème de sécurité
Un peu hors sujet ici, mais c'est très important! Un échappatoire indésirable à la fin du fichier pourrait provoquer une fuite de mémoire!
any-invalid-command-you-like-here ^
Cette commande fuirait toute la mémoire, rendant le système complètement inutilisable ! Voir ici pour plus d'informations.
Caractères spéciaux FIND et FINDSTR
Dans find
et findstr
, certains caractères spéciaux requièrent une certaine prudence.
TROUVER
Il n'y a qu'un seul caractère à échapper - "
citation. Pour y échapper, ajoutez simplement une autre citation à côté. Alors "
devient ""
. Assez simple.
FINDSTR
Findstr
est livré avec plein de personnages pour s'échapper, alors soyez très prudent. En utilisant \
, nous pouvons échapper à des caractères spéciaux. Voici une liste de caractères spéciaux à échapper
Personnage | Résultat échappé |
---|---|
\ | \\ |
[ | \ [ |
] | \] |
" | \ " |
. | \. |
* | \ * |
? | \? |
Caractères spéciaux FOR / F
FOR / F
Dans une déclaration FOR /F
, certains caractères doivent s'échapper, ici une liste (prise et éditée à partir de la page de Rob van der Woude)
Personnage | Résultat échappé | Remarques |
---|---|---|
' | ^ ' | Seulement nécessaire dans les crochets de FOR /F , sauf si usebackq est spécifié. |
` | ^ ` | Seulement nécessaire dans les crochets de FOR /F , quand usebackq est spécifié |
, | ^, | ┒ |
; | ^; | ┃ |
= | ^ = | ┣ Doit être échappé dans les crochets de FOR /F , même s'il est entre guillemets |
( | ^ ( | ┃ |
) | ^) | ┙ |
Caractères spéciaux supplémentaires
Voici une liste d'autres caractères spéciaux, nécessitant ou pouvant nécessiter une évasion, mais non mentionnés ci-dessus.
Personnage | Résultat échappé | Remarques |
---|---|---|
% | %% | |
[LF] | ^ [LF] | Cette astuce est citée par Mark Stang dans le groupe de alt.msdos.batch . |
Échapper à travers le pipeline
Quand il y a une expression avec une pipe, la cmd
commence deux threads des deux côtés de la pipe et l'expression est analysée deux fois (pour chaque côté du pipe) donc les carets doivent être doublés.
Sur le côté gauche:
echo ^^^&|more
Sur le côté droit:
break|echo ^^^&