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 code if
  • 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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow