batch-file
Bogues dans le processeur cmd.exe
Recherche…
Introduction
Cette rubrique se concentrera sur les erreurs causées par les bogues du processeur. Voici les éléments sur lesquels nous nous concentrerions sur la cause et la solution du problème.
Remarques
Dans l'exemple DEL File Extension , l'utilisateur X. Liu remarque que ce bogue ne se produit pas lorsque l'extension de fichier dans la commande DEL
est inférieure à 3 caractères.
Parenthèses confusion
À partir de ce site Web, le PO a remarqué un problème.
Cause
Considérez l'extrait de code suivant.
if 1==1 (
set /a result = 2*(3+4)
)
À première vue, vous pensez peut-être que CMD.exe
le traiterait comme CMD.exe
:
- La condition est vraie, exécutez le bloc de code
- Définir la valeur du résultat de la variable sur
14
- Continuer
Cependant, le processus CMD.exe
comme tel:
- La condition est vraie, exécutez le bloc de code
- Calculer
2*(3+4
, the)
après que 4 soit traité à la fin du bloc de codeif
- Un hasard
)
est apparu!
La deuxième étape renverrait une erreur de Unbalanced parentheses
.
Solution
Selon un ensemble allemand CMD.exe set /?
, nous devrions citer des opérations arithmétiques. Voici un exemple.
précédent | Résultat |
---|---|
set /a result=2+5*4 | set /a result="2+5*4" |
Par ailleurs, selon un ensemble anglais CMD.exe set /?
, des guillemets sont requis si des opérateurs logiques ou modulaires sont présents dans l'expression (bien que ce ne soit pas une étape indispensable ).
Caractère d'évasion inapproprié
Dans cette question , l'utilisateur txtechhelp a détecté un problème avec le caractère ^
qui pouvait poser un problème de sécurité.
Cause
anyInvaildCommand ^
Note: Assurez-vous que le curseur ( ^
) est le dernier caractère! Tout CR\LF
supplémentaire ne fonctionnera pas du tout!
Le caret cherche le prochain personnage à échapper. Cependant, les caractères ne sont plus disponibles pour s'échapper, donc cmd
boucle à l'infini, à la recherche d'un personnage à échapper. Dans ce processus de "boucle", cmd.exe
consommera la mémoire de votre ordinateur. Et manger graduellement toute la mémoire, mettant l’ordinateur à genoux.
Ce problème peut entraîner des problèmes de sécurité plus graves, car il suffit de saisir le code sur l'ordinateur déverrouillé.
Solutions
Utiliser la page de codes UTF-16 pourrait résoudre ce problème. Seul UTF-8 ou ASCII provoquerait le bogue.
Assurez-vous qu'il y a un
CR\LF
supplémentaire dans le fichier, ou simplement n'utilisez pas caret à la fin du fichier.
Supplémentaire
Ce bug semble être résolu dans Windows 10.
Extension de fichier DEL
Ce bogue a été signalé par steve2916 à partir de ce fil de discussion Microsoft Windows.
Cause
Considérons un dossier avec de tels fichiers.
TestA.doc
TestB.doc
TestC.docx
TestD.docx
Si nous voulons supprimer tous les fichiers .doc
de ce répertoire, nous ferions généralement ce qui suit:
del *.doc
Cependant, cette commande supprime également les fichiers .docx
. La même chose se produit sur les extensions de fichiers avec ce modèle.
Déposer un | Fichier B |
---|---|
N'importe quel nom. abc | Un autre nom. ab d |
Comme nous pouvons le voir, tant que la chaîne d'extension de fichier contient la chaîne utilisée dans la commande del
, le fichier sera supprimé. Notez que ce bogue se produit uniquement lorsque la chaîne d'extension utilisée dans la commande del
contient au moins trois caractères. Par exemple, del *.do
ne supprime pas A.doc
ou A.docx
.
Solution
Dans le sujet, l'utilisateur MicroCompsUnltd a remarqué que l'utilisation de Powershell
résoudrait le problème.