2010-02-02 19 views
7

Ich versuche, einige Dateien mit Unicode-Zeichen in ihnen mit Batch-Skript (es ist eine Voraussetzung) zu löschen. So laufe ich cmd und ausführen:Batch-Skript wird nicht ausgeführt, wenn Chcp

> chcp 65001 

effektiv Einstellung Codepage UTF-8. Und es funktioniert:

D:\temp\1>dir 
Volume in drive D has no label. 
Volume Serial Number is 8C33-61BF 

Directory of D:\temp\1 

02.02.2010 09:31 <DIR>   . 
02.02.2010 09:31 <DIR>   .. 
02.02.2010 09:32    508 1.txt 
02.02.2010 09:28    12 delete.bat 
02.02.2010 09:20    95 delete.cmd 
02.02.2010 09:13 <DIR>   Rún 
02.02.2010 09:13 <DIR>   Гуцул Каліпсо 
       3 File(s)   615 bytes 
       4 Dir(s) 11 576 438 784 bytes free 

D:\temp\1>rmdir Rún 

D:\temp\1>dir 
Volume in drive D has no label. 
Volume Serial Number is 8C33-61BF 

Directory of D:\temp\1 

02.02.2010 09:56 <DIR>   . 
02.02.2010 09:56 <DIR>   .. 
02.02.2010 09:32    508 1.txt 
02.02.2010 09:28    12 delete.bat 
02.02.2010 09:20    95 delete.cmd 
02.02.2010 09:13 <DIR>   Гуцул Каліпсо 
       3 File(s)   615 bytes 
       3 Dir(s) 11 576 438 784 bytes free 

Dann habe ich die gleichen rmdir Befehle in Batch-Skript und speichern Sie es in UTF-8-Codierung. Aber wenn ich renne, passiert nichts, buchstäblich nichts: nicht einmal Echo funktioniert in diesem Fall vom Batch-Skript. Selbst das Speichern eines Skripts in der OEM-Codierung hilft nicht.

So scheint es, dass wenn Skripte zu UTF-8 in der Konsole ändern, Skripte aufhören zu arbeiten. Kann jemand das beheben?

+0

Nachdenken und bald eine richtige Antwort schreiben, aber zwei Fragen: Haben Sie sichergestellt, dass Ihre Batchdatei am Anfang nicht U + FEFF hat? Und können Sie VBScript vielleicht anstelle einer Batch-Datei verwenden? Unicode-Unterstützung ist dort viel einfacher. – Joey

+0

Nein, in der Batch-Datei ist keine Stückliste vorhanden. Ich kann VBS benutzen, aber ich wollte nur wissen, ob mein Problem direkt gelöst werden kann. – Andy

+0

Vielleicht kann es; Ich habe vor einiger Zeit einige Fortschritte mit Unicode in Batch-Dateien gemacht, aber es ist keineswegs schön und es war bestenfalls lückenhaft. – Joey

Antwort

8

Wenn Unicode in der Batch-Datei unterstützt werden soll, bricht CHCP in einer Zeile die Batch-Datei ab. Was ich vorschlagen, ist CHCP auf jeder Batch-Datei Zeile setzen, die Unicode benötigt als

chcp 65001 > nul && <real command here> 

Beispiel folgt: In meinem Fall habe ich einen schönen Schwanz meines Log-Dateien beim Debuggen, aber der Inhalt selbst für Latin-1 haben wollte Charaktere wurden durcheinander gebracht. Also hier ist meine Batch-Datei, die die echte Schwanz-Implementierung von Windows Resource Kit umschließt.

@C:\WINDOWS\system32\chcp.com 65001 >nul && tail.exe -f %1 

Darüber hinaus müssen Sie für die Ausgabe an eine Konsole eine TrueType-Schriftart, d. H. Lucidia Console, einstellen.

Und anscheinend zur Ausgabe an einen der Befehlszeile als Unicode-Datei muss laufen, so würden Sie Ihre Batch-Skript kick off als

cmd /u /c <batch file command here> 

Haftungsausschluss folgt: Getestet unter Windows XP SP3 mit Windows Resource Kit.

+0

Dann könnte 'chcp 65001 && path \ to \ batchfile.bat' auch Arbeit? – tripleee

0

Die Unicode-Unterstützung in der Konsole und insbesondere in Batch-Dateien ist ziemlich schlecht. Können Sie die Anforderung "PowerShell" oder "Active Scripting" (VBScript oder JScript) "verdrehen"?

Es wird Ihnen eine Menge Ärger auf lange Sicht speichern (wenn Sie dies über diese einfache Aufgabe wachsen müssen)

Ganz zu schweigen davon, dass sowohl Powershell und Active verwenden viel mächtiger Sprachen, für Funktionen ermöglicht, richtige Schleifen, echte Variablen, Debugger, viele Extras für ein seriöseres Projekt.

+0

Ja, ich kann. Ich wollte nur herausfinden, ob es möglich ist, diesen Fehler zu lösen (eigentlich ist es ein Fehler, nicht wahr?) – Andy

0

Versuchen Sie, eine leere Zeile als erste Zeile in der Batch-Datei einfügen ...

Zeile 1:

Zeile 2: CHCP 65001

Zeile 3: Skript commmands

Sollte funktionieren !

+0

Entschuldigung, ich habe vergessen: Stellen Sie sicher, dass die BAT-Datei als UTF-8 gespeichert wurde. –

+0

Warum sollte das funktionieren? Bitte erweitern Sie, wenn möglich, Testfälle. – adamdunson

+0

Mit Win7 funktioniert das, aber Sie haben keine Probleme mit Chcp 65001, mit oder ohne eine leere Zeile. Mit XP schlägt das immer noch fehl. – jeb

Verwandte Themen