web-dev-qa-db-fra.com

╗┐ 'n'est pas reconnu comme une commande interne ou externe

Lors de l'exécution de certains fichiers (principalement de lot) en utilisant psexec, je reçois ces symboles weird ╗┐ 'avant ma commande. Ma pensée initiale était que j'utilisais un encodage incorrect, mais après avoir vérifié, j'ai réalisé que tous mes fichiers utilisaient UTF-8.

26
miestasmia

Je reçois ces symboles bizarres avant ma commande [...] Tous mes fichiers utilisaient UTF-8.

Cela a deux causes:

  1. cmd.exe ne prend pas en charge UTF-8. Il utilise toujours l'un des codages monte-octets souvent appelés "OEM" - CP437, CP775, etc., en fonction des paramètres régionaux du système.

    (Je m'attendais également à soutenir l'UTF-16, mais apparemment pas; pas même si j'ai ajouté le nom de l'UTF-16.)

  2. Votre éditeur de texte ajoute un point d'octet de l'octet UTF-8 (octets EF _ BB _ BF) au début de tous les fichiers UTF-8.

    Quand -cmd.exe Lit votre script, il ne sait pas quoi faire avec la marque - il voit la naissance comme trois caractères CP437 ordinaires, et tente de les utiliser dans le nom de la commande.

Configurez votre éditeur pour arrêter d'ajouter les fichiers codés BOM aux fichiers UTF-8. (Cela n'a aucun sens dans UTF-16 et est très inutile dans UTF-8.)

Compilerait les fichiers par lots dans une exe résolvant le problème?

euh

quelle

33
user1686

Pour davantage @ dsolimano répond , si vous êtes spécifiquement Utilisation Visual Studio, et dans mon cas c'est 201 Je l'ai résolu en procédant comme suit:

  1. Ouvrir Visual Studio.
  2. Cliquez sur Outils> Options.
  3. Cliquez sur Editeur de texte> Extension de fichier.
  4. Dans la boîte extension, entrez BAT.
  5. Dans [éditeur Désadez, sélectionnez Editeur de code source (texte) avec codage et cliquez sur Ajouter.
  6. Cliquez [[~ # ~] OK [~ # ~ ~] Pour enregistrer et quitter.

Maintenant, lorsque vous ouvrez un . BAT Fichier de l'intérieur Visual Studio, vous obtiendrez initialement:

enter image description here

Vous voudrez vous échapper à travers les options jusqu'à ce que vous arriviez à la [~ # ~] DOS [~ # ~ # ~] Option de votre langue:

enter image description here

Cliquez sur [~ # ~] OK [~ # ~ ~] Pour terminer l'ouverture du fichier.


OK, même s'il devrait être assez évident à ce stade, si vous pouvez voir le ∩╗┐ caractères au début de votre fichier, il vous incomberait à vous supprimer et à enregistrer le fichier, maintenant avec le codage correct. C'est ce qui vous empêche d'être invité à nouveau la prochaine fois.


Avec tout cela en place, vous serez heureux de savoir que vous pouvez maintenant voir, modifier et sauvegarder votre . BAT fichier (s) de dans Visual Studio de sorte que cmd.exe ne vous donne plus l'erreur odieuse susmentionnée de:

'' n'est pas reconnu comme une commande interne ou externe, un programme actionnant ou un fichier de commandes.

21
Code Maverick

Ce sont unicode marques d'ordre d'octets . Cmd.exe ne les comprend pas. Si vous redoublez vos fichiers dans le Bloc-notes avec encodage ANSI, cela devrait résoudre le problème.

Par exemple, j'ai créé ce fichier de commandes:

echo Hello World

D'abord, je l'enregistre avec le codage UTF-8

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
'echo' is not recognized as an internal or external command,
operable program or batch file.

Puis avec unicode

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>■e
'■e' is not recognized as an internal or external command,
operable program or batch file.

Et enfin avec ansi

C:\Users\DSolimano\Desktop\junk>test.bat

C:\Users\DSolimano\Desktop\junk>echo Hello World
Hello World
10
dsolimano

Comme expliqué précédemment, ce caractère est le nom de caractère Unicode (Mark d'octet) utilisé comme signature et que cmd.exe ne reconnaît pas.

Vous pouvez le supprimer en toute sécurité de nombreuses manières.

J'ai trouvé très facile à faire comme suit:

  1. ouvrez le fichier dans Notepad ++
  2. aller à Menu de codage
  3. cochez l'option: coder dans utf-8 sans bom
  4. Enregistrer, et c'est tout.
5
Sabri