2015-08-24 5 views
5

Ich habe ein Problem mit chcp 65001 Befehl in der Windows-Shell.chcp 65001 und eine .bat-Datei

Ich muss eine Liste von Dateien in einem Ordner erstellen. Also lief ich cmd.exe, getippt

cd folder 
dir /B /O:N > list_of_files.txt 

Es funktionierte, aber ich hatte ein Problem mit speziellen, nicht-ASCII-Zeichen, die in einigen Dateinamen sind. So habe ich chcp 65001

Alles funktionierte, aber wenn ich diese Befehle in einer BAT-Datei setzen, wird das Skript nicht.

So

cd folder 
chcp 65001 
dir /B /O:N > list_of_files.txt 

erzeugen nicht auf der Liste.

und

cd folder 
chcp 65001 && dir /B /O:N > list_of_files.txt 

sowie

cd folder 
chcp 65001 > nul && dir /B /O:N > list_of_files.txt 

generiert die Liste, aber mit der Standard-Codierung: /.

Alles funktioniert in cmd.exe, aber nicht in .bat-Dateien. Ich habe das Thema gelesen: stackoverflow.com/questions/2182568/batch-script-is-not-executed-if-chcp-was-called, aber es hat nicht geholfen.

EDIT: Ich löste teilweise mein Problem, Ändern chcp 65001 zu chcp 1250, weil alle Zeichen in dieser Codierung waren. Aber eigentlich beantwortet das die Frage nicht.

+0

Was passiert, wenn Sie diese vier Befehle in einer Batch-Datei setzen und es laufen? 'cd ordner'' chcp 65001' 'dir/B/O: N''pause' – foxidrive

+0

foxdrive: das cmd-fenster öffnet sich für kurze zeit und schließt sofort – maro

+0

hast du es mit dem 'pause'-befehl in der zeile 4 versucht? – foxidrive

Antwort

0

Nur unter Windows 7 getestet, funktioniert unter Windows Vista möglicherweise nicht.

Anscheinend chcp betrifft nicht dir direkt.

die Ausgabe von dir Parse und über echo drucken:

chcp 65001 
>list_of_files.txt (for /f "delims=" %%a in ('dir /B /O:N') do echo %%a) 

Hinweis: Die Ausgabedatei wird nicht UTF-8 Byte Order Mark.

+0

Es funktioniert nicht. – maro

+0

Bitte erläutern. Es funktioniert auf Win7SP1x64 Englisch hier. – wOxxOm

+0

Hast du das in eine .bat-Datei geschrieben? Ich habe Windows Vista 32bit. – maro

1

Verwenden Sie cmd /U. Siehe http://ss64.com/nt/cmd.html:

Die häufigsten Textdateien ANSI sind, verwenden Sie diese Schalter, wenn Sie müssen den Zeichensatz konvertieren.Diese Optionen werden piping or redirecting in eine Datei beeinflussen:

  • /A Output ANSI-Zeichen
  • /U Output UNICODE-Zeichen (UCS-2 Little Endian)

Hier ist mein Versuch (starten Sie es unter cmd /A, natürlich):

@ECHO OFF >NUL 
SETLOCAL EnableExtensions 

:: create a UNICODE file with Byte Order Mark using `wmic` 
chcp 852 >NUL 
>list_of_files.txt wmic os get localdatetime 

:: store a line with BOM to a variable 
:: although FINDSTR does not support UTF-16 files 
:: it will read first three bytes at least 
for /F "delims=" %%G in (' 
    findstr "^" list_of_files.txt 
    ') do set "UTF8BOM=%%G" 

:: write BOM only* to a file (* echo writes hexadecimal value FFFE0D0A) 
:: the `<NUL set /p =text` trick does not work: chokes down leading `FF` 
>list_of_files.txt echo(%UTF8BOM:~0,2% 

chcp 65001 >NUL 
:: add CRLF in Unicode (hexadecimal 0D000A00) 
>>list_of_files.txt cmd /U /C echo(

:: add result of `dir /B /O:N` in Unicode 
>>list_of_files.txt cmd /U /C dir /B /O:N 

:: check the result: still invalid first line, see output 
type list_of_files.txt 
chcp 852 >NUL 

Ausgabe. Immer noch ungültige erste Zeile (das hexadezimale 0D0A), sorry; Verwenden Sie eine andere Methode reine Utf-8 Bytereihenfolgemarkierung zu erhalten:

==>cmd /A /C D:\bat\SO\UTF8BOM32182619.bat 
਍ 
cpANSI_OoCcSsUu.txt 
cpANSI_ÖöÇ窺Üü.txt 
escrzyaie.txt 
ěščřžýáíé.txt 
list_of_files.txt 

==> 
+1

Aber der Benutzer verwendet nicht cmd.exe, er nur die .bat-Datei ausführen, so wie kann ich '/ U' in einer .bat-Datei verwenden? – maro

+0

Warum _read_ the_batch script? Es gibt 'cmd/U' verwendet _twice _... Und was meinst du mit _he nur ** run ** the .bat file_? Doppelklicken Sie darauf? Werfen Sie einen Blick in den Task-Manager: _any_ .bat-Skript wird immer in einer 'cmd'-Instanz ausgeführt ... – JosefZ

0

es sieht aus wie ein Problem I recently met

cd folder 
dir /B /O:N > list_of_files.tmp 
cmd /U /C type list_of_files.tmp>list_of_files.txt 
del list_of_files.tmp 
0

Auf Windows 2003 dies gearbeitet:

chcp 65001 && cmd /C dir C:\WINDOWS\* && chcp 866 

C:\windows\* - nur Probe

&& chcp 866 - Standard-Codepage, damit der Stapel fortgesetzt werden kann

2

"chcp 65001" funktioniert nicht vor Windows 7. Dies führt dazu, dass der Stapel sofort beendet wird. Es gibt keinen Workaround.

Ich habe dies durch die direkte Prüfung 2003, XP, Vista, überprüft 2008, 7, 8 und 10.

Verwandte Themen