́╗┐ 'non è riconosciuto come comando interno o esterno


23

Quando eseguo determinati file (principalmente batch) usando PsExec ottengo questi strani simboli ́╗┐ 'prima del mio comando. Il mio pensiero iniziale era che stavo usando una codifica errata, ma dopo aver controllato, mi sono reso conto che tutti i miei file stavano usando UTF-8.


Perché non convertirli invece in UTF-16LE?
Ignacio Vazquez-Abrams,

Qual è la differenza?
miestasmia,

La differenza è che Windows di solito non usa UTF-8.
Ignacio Vazquez-Abrams,

Risposte:


30

Ottengo questi strani simboli ́╗┐ 'prima del mio comando […] tutti i miei file stavano usando UTF-8.

Ciò ha due cause:

  1. cmd.exe non supporta UTF-8. Utilizza sempre una delle codifiche a byte singolo spesso chiamata "OEM" - cp437, cp775 e così via, a seconda delle impostazioni internazionali del sistema.

    (Mi aspettavo che supportasse anche UTF-16, ma apparentemente no; nemmeno se avessi aggiunto la distinta base UTF-16.)

  2. Il tuo editor di testo sta aggiungendo un "segno di ordine byte" UTF-8 (byte EF BB BF) all'inizio di tutti i file UTF-8.

    Quando cmd.exe legge il tuo script, non sa cosa fare con il segno: vede la DBA come tre normali caratteri cp437 e tenta di usarli come parte del nome del comando.

Configura il tuo editor per interrompere l'aggiunta della DBA ai file codificati UTF-8. (Ha senso solo in UTF-16 ed è molto inutile in UTF-8.)

Compilare i file batch in un exe risolverebbe il problema?

uh

che cosa


3
Non direi che le distinte materiali siano "molto inutili" in UTF-8; sebbene siano in questo caso particolare. Molte applicazioni li usano per determinare che il testo è effettivamente UTF-8 e non un'altra codifica.
Dour High Arch,

15

Per approfondire la risposta di @ dsolimano , se si utilizza specificamente Visual Studio , e nel mio caso è il 2013 , l'ho risolto procedendo come segue:

  1. Apri Visual Studio .
  2. Fai clic su Strumenti > Opzioni .
  3. Fai clic su Editor di testo > Estensione file .
  4. Nella casella Estensione , inserisci bat .
  5. Nel menu a discesa Editor , seleziona Editor codice sorgente (testo) con codifica e fai clic su Aggiungi .
  6. Fare clic su OK per salvare ed uscire.

Ora, quando apri un file .bat da Visual Studio , inizialmente ti verrà richiesto con:

inserisci qui la descrizione dell'immagine

Ti consigliamo di approfondire le opzioni fino a quando non arrivi all'opzione DOS della tua lingua:

inserisci qui la descrizione dell'immagine

Fare clic su OK per terminare l'apertura del file.


Ok, anche se a questo punto dovrebbe essere abbastanza ovvio, se riesci a vedere i ∩╗┐caratteri all'inizio del tuo file, ti spingeresti a rimuoverli e salvare il file, ora con la codifica corretta. Questo è ciò che ti impedisce di essere richiesto nuovamente la prossima volta.


Con tutto ciò a posto, sarai felice di sapere che ora puoi visualizzare , modificare e salvare i tuoi file .bat da Visual Studio in modo che cmd.exe non ti dia più il suddetto errore odioso di:

'∩╗┐' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.


2
Questa correzione funziona perfettamente anche in VS2017
Greg Trevellick,

10

Questi sono segni di ordine byte Unicode . Cmd.exe non li capisce. Se si salva nuovamente i file in Blocco note con codifica ANSI, ciò dovrebbe risolvere il problema.

Ad esempio, ho creato questo file batch:

echo Hello World

Prima lo salvo con la codifica 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.

Quindi con 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.

E infine con ANSI

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

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

4

Come spiegato in precedenza, questo carattere è il carattere Unicode BOM (Byte Order Mark) utilizzato come firma e che cmd.exe non riconosce.

Puoi eliminarlo in sicurezza in molti modi.

Ho trovato molto facile fare come segue:

  1. apri il file in Notepad ++
  2. vai al menu Codifica
  3. spuntare l'opzione: codifica in UTF-8 senza DBA
  4. Salva, e basta.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.