́╗┐ 'wird nicht als interner oder externer Befehl erkannt

25

Wenn ich bestimmte Dateien (hauptsächlich Batch-Dateien) mit PsExec ausführe, werden diese seltsamen Symbole vor meinem Befehl angezeigt. Mein erster Gedanke war, dass ich eine falsche Codierung verwendete, aber nach der Überprüfung stellte ich fest, dass alle meine Dateien UTF-8 verwendeten.

Miestasmie
quelle
Warum konvertieren Sie sie nicht stattdessen nach UTF-16LE?
Ignacio Vazquez-Abrams
Was ist der Unterschied?
Miestasmia
Der Unterschied besteht darin, dass Windows normalerweise nicht UTF-8 verwendet.
Ignacio Vazquez-Abrams

Antworten:

32

Ich erhalte diese seltsamen ́╗┐-Symbole, bevor mein Befehl […] alle meine Dateien UTF-8 verwendeten.

Dies hat zwei Ursachen:

  1. cmd.exe unterstützt UTF-8 nicht. Es wird immer eine der Single-Byte-Codierungen verwendet, die oft als "OEM" bezeichnet werden - cp437, cp775 usw., abhängig von den regionalen Einstellungen des Systems.

    (Ich habe erwartet, dass es auch UTF-16 unterstützt, aber anscheinend nicht. Auch nicht, wenn ich die UTF-16-Stückliste hinzugefügt habe.)

  2. Ihr Texteditor fügt EF BB BFam Anfang aller UTF-8-Dateien eine UTF-8-Markierung (Byte Order Mark ) ein.

    Wenn cmd.exe Ihr Skript liest, weiß es nicht, was es mit der Markierung tun soll - es sieht die Stückliste als drei gewöhnliche cp437-Zeichen und versucht, sie als Teil des Befehlsnamens zu verwenden.

Konfigurieren Sie Ihren Editor so, dass das Hinzufügen der Stückliste zu UTF-8-codierten Dateien beendet wird. (Dies ist nur in UTF-16 sinnvoll und in UTF-8 sehr nutzlos.)

Würde das Kompilieren der Batch-Dateien zu einer Exe das Problem lösen?

äh

Was

Grawity
quelle
3
Ich würde nicht sagen, dass Stücklisten in UTF-8 "sehr nutzlos" sind. obwohl sie in diesem speziellen Fall sind. Viele Anwendungen verwenden sie, um festzustellen, ob es sich bei dem Text tatsächlich um UTF-8 und nicht um eine andere Codierung handelt.
Dour High Arch
18

Zur weiteren Antwort des @ dsolimano , wenn Sie speziell mit Visual Studio , und in meinem Fall ist es 2013 , fest ich es durch folgende Maßnahmen:

  1. Öffnen Sie Visual Studio .
  2. Klicken Sie auf Extras > Optionen .
  3. Klicken Sie auf Texteditor > Dateierweiterung .
  4. In der Verlängerung Feld geben Sie bitten .
  5. Im Editor Wählen Sie im Dropdown - Quellcode (Text) Editor Mit Encoding und klicken Sie auf Hinzufügen .
  6. Klicken Sie auf OK , um zu speichern und zu beenden.

Wenn Sie jetzt eine .bat- Datei in Visual Studio öffnen , werden Sie zunächst dazu aufgefordert:

Bildbeschreibung hier eingeben

Sie werden die Optionen durchgehen wollen, bis Sie zur DOS- Option Ihrer Sprache kommen:

Bildbeschreibung hier eingeben

Klicken Sie auf OK , um das Öffnen der Datei abzuschließen.


Okay, auch wenn es an dieser Stelle ziemlich offensichtlich sein sollte, dass Sie die ∩╗┐Zeichen am Anfang Ihrer Datei sehen, müssen Sie sie entfernen und die Datei jetzt mit der richtigen Codierung speichern. Dies verhindert, dass Sie beim nächsten Mal erneut dazu aufgefordert werden.


Nach alledem sind Sie froh zu wissen, dass Sie jetzt Ihre .bat- Datei (en) in Visual Studio anzeigen , bearbeiten und speichern können, sodass cmd.exe nicht mehr den oben genannten abscheulichen Fehler verursacht:

'∩╗┐' wird nicht als interner oder externer Befehl, ausführbares Programm oder Batch-Datei erkannt.

Code Maverick
quelle
2
Dieser Fix funktioniert auch in VS2017 perfekt
Greg Trevellick
Ich hätte das nie gedacht. Immer noch eine gültige Lösung für VS2019.
Hbulens
10

Das sind Unicode Byte Order Marks . Cmd.exe versteht sie nicht. Wenn Sie Ihre Dateien im Editor mit ANSI-Codierung erneut speichern, sollte dies das Problem beheben.

Zum Beispiel habe ich diese Batch-Datei erstellt:

echo Hello World

Zuerst speichere ich es mit UTF-8-Codierung

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.

Dann mit 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.

Und schließlich mit ANSI

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

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

Wie bereits erläutert, handelt es sich bei diesem Zeichen um das Unicode-Zeichen BOM (Byte Order Mark), das als Signatur verwendet wird und von cmd.exe nicht erkannt wird.

Sie können es auf viele Arten sicher löschen.

Ich fand es sehr einfach, wie folgt vorzugehen:

  1. öffne die Datei in Notepad ++
  2. gehe zum Encoding Menü
  3. Aktivieren Sie die Option: In UTF-8 ohne Stückliste codieren
  4. Speichern und fertig.
Sabri
quelle