Problem mit Umlauten bei xcopy
Hallo,
ich habe in einem Verzeichnis "Überweisungen" verschiedene Textfiles, deren Namen Umlaute enthalten (ä, ö, ü)
der folgende Code liefert mir wegen dieser Umlaute nicht die richtigen Namen:
In der Ergebnisdatei stehen dann weder der Verzeichnisname noch die Dateinamen korrekt drin.
Ich hab schon verschiedene Sachen ausprobiert und auch in der Suchfunktion nach ähnlichen Problemen gesucht.
Bin aber leider nicht weitergekommen.
Ich habe das Betriebssystem Windows7.
Grüße
joe65
ich habe in einem Verzeichnis "Überweisungen" verschiedene Textfiles, deren Namen Umlaute enthalten (ä, ö, ü)
der folgende Code liefert mir wegen dieser Umlaute nicht die richtigen Namen:
@echo off
setlocal
cls
mode con: cols=130 lines=50
set "Ergebnisdatei=Gefundene_Dateien.txt"
chcp 1252>nul
xcopy /LSYH /D:09-16-13 "D:\Meine_Dateien\Überweisungen" c:\>>%Ergebnisdatei%
chcp 850>nul
Ich hab schon verschiedene Sachen ausprobiert und auch in der Suchfunktion nach ähnlichen Problemen gesucht.
Bin aber leider nicht weitergekommen.
Ich habe das Betriebssystem Windows7.
Grüße
joe65
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 217046
Url: https://administrator.de/contentid/217046
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo joe65,
sieht so aus als würde
Was bei meinen Tests funktioniert hat ist folgendes:
Das Script nutzt den Parameter
Grüße Uwe
sieht so aus als würde
xcopy
egal welche Optionen man auf der Kommandozeile einstellt immer nur mit der Codepage 850 Befehlsausgaben weiterleiten.Was bei meinen Tests funktioniert hat ist folgendes:
@echo off & setlocal
set "Ergebnisdatei=Gefundene_Dateien.txt"
cmd /U /c "for /f "delims=" %%k IN ('xcopy /LSYH /D:09-16-13 "D:\Meine_Dateien\Überweisungen" c:\') DO @(echo %%k >>%Ergebnisdatei%)"
/U
des Befehlsinterpreters um alle Ausgaben im Unicode-Format zu formatieren. Da dieser Parameter nur für interne Befehle der Shell gilt müssen die Zeilen von der xcopy-Ausgabe zusätzlich nochmal via echo
ausgegeben werden.Grüße Uwe
Stimmt, hatte das "D:\Meine_Dateien\Überweisungen" bei mir mit einem anderen Ordner getestet der kein Umlaut im Namen hatte. Wenn du das aber mal mit einem Ordner ohne Umlaut testest geht es. Habe dafür im Moment keine Lösung außer das du den Ordner in "Ueberweisungen" umbenennst. Ansonsten kehr xcopy den Rücken und nehm Robocopy, das hat eine vernünftige Log-Funktionalität.
Grüße Uwe
Grüße Uwe
Hi Uwe,
mich würde interessieren, wie du auf das "komische" Zeichen gekommen bist
Grüße
Dome
mich würde interessieren, wie du auf das "komische" Zeichen gekommen bist
Grüße
Dome
Hallo joe65.
Ebenso wirst du immer mal wieder Probleme mit &, % und ! in Dateinamen haben. Also, wenn du vorhast mit der CMD zu arbeiten, sorge vor und benutze so etwas von vorn herein nicht.
Grüße
rubberman
Beim "robocopy"-Befehl scheint es keine analoge Option zu /L wie bei xcopy zu geben.
Doch gibt es, und zwar /L, wie dir ein Blick in die Hilfe (robocopy /?) bereits gezeigt hätte.Die Dateien mit Umlauten werden auch hier nicht korrekt wiedergegeben.
Dann schmeiß die Umlaute raus und benenne die Dateien/Verzeichnisse entsprechend um.Ebenso wirst du immer mal wieder Probleme mit &, % und ! in Dateinamen haben. Also, wenn du vorhast mit der CMD zu arbeiten, sorge vor und benutze so etwas von vorn herein nicht.
Grüße
rubberman
Hi,
mit
Ich hab hier unter Win8 mit keiner code page (850 oder 1252) Probleme mit den Umlauten.
Und das bei eingestelltem Rasterfont.
lg.
mit
ROBOCOPY
geht es so (britisches BS am cmd Prompt, für batch oder andere Sprachen ggf. anpassen):cmd /u /c (for /f "tokens=3*" %a in ('"robocopy "D:\Meine_Dateien\Überweisungen" "%temp%" /l |find "New File""') do @echo %b)>logfile.txt
Ich hab hier unter Win8 mit keiner code page (850 oder 1252) Probleme mit den Umlauten.
Und das bei eingestelltem Rasterfont.
lg.
Zitat von @106543:
Hi Uwe,
mich würde interessieren, wie du auf das "komische" Zeichen gekommen bist
Das Zeichen Hi Uwe,
mich würde interessieren, wie du auf das "komische" Zeichen gekommen bist
"š"
steht in der Codepage 1252 an der dezimalen Stelle 154. Wenn du dir dann als Vergleich die Codepage 850 ansiehst steht dort bei Dezimal 154 das Ü
. Da der Standard-Editor Notepad Dateien standardmäßig in ANSI(CP 1252) verfasst kann man dieses Zeichen anstatt des Ü eintragen, es wird dann unter der CP850 der Shell als Ü
interpretiert.Erzeugen kann man das Zeichen indem man ALT gedrückt hält und auf der Nummerntastatur 154 eingibt und dann ALT wieder loslässt.
Grüße Uwe
Bei Interesse: What encoding/code page is cmd.exe using
lg.
lg.
Hallo joe65.
Beinhalten ist richtig, aber sie werden durch unterschiedliche Bytes repräsentiert. Die Codepage gibt an zu welchem Zeichen ein gelesenes Byte interpretiert wird. Wenn du auf der sicheren Seite sein willst, dann verwende nur die Standard ASCII Zeichen, die mit 7 Bit Breite auskommen. Diese sind in jeder Codepage gleich. Davon aber auch nur die druckbaren Zeichen und ohne die, die einen Sonderstatus in der Kommandozeile haben
Grüße
rubberman
Zitat von @joe65:
Was mir aber nicht ganz klar ist, warum die Umlaute eigentlich nicht korrekt angezeigt werden, denn Codepage 850 (auch 1252) beinhaltet doch diese Umlaute.
Was mir aber nicht ganz klar ist, warum die Umlaute eigentlich nicht korrekt angezeigt werden, denn Codepage 850 (auch 1252) beinhaltet doch diese Umlaute.
Beinhalten ist richtig, aber sie werden durch unterschiedliche Bytes repräsentiert. Die Codepage gibt an zu welchem Zeichen ein gelesenes Byte interpretiert wird. Wenn du auf der sicheren Seite sein willst, dann verwende nur die Standard ASCII Zeichen, die mit 7 Bit Breite auskommen. Diese sind in jeder Codepage gleich. Davon aber auch nur die druckbaren Zeichen und ohne die, die einen Sonderstatus in der Kommandozeile haben
Grüße
rubberman
moin,
Wenn keine Unicodeausgabe gewünscht ist, der Batch mit Umlauten verfasst wurde und der Log in ANSI sowie die CMD die Umlaute richtig zeigt, in etwa so:
Gruß Phil
Wenn keine Unicodeausgabe gewünscht ist, der Batch mit Umlauten verfasst wurde und der Log in ANSI sowie die CMD die Umlaute richtig zeigt, in etwa so:
@echo off
setlocal
mode con: cols=130 lines=50
set "Ergebnisdatei=Gefundene_Dateien.txt"
chcp 1252>nul
set "Quelle=D:\ADtest\test2\Ä-Ae;Ö-Oe;Ü-Ue;ä-ae;ö-oe;ü-ue;ß-sz"
set "QT="
for %%i in ("%quelle:\=" "%") do set /a qt+=1
3>"%Ergebnisdatei%" (
for /f "delims=" %%P in ('Dir /S /b /a-d-l "%Quelle%"') do for /f "tokens=%qt%*delims=:\" %%E in ("%%P") do (
xcopy /iLYH /D:09-16-13 "%%P" "C:\Ziel\%%F*" |find /v "0 Datei(en) kopiert" &&>&3 echo %%P
))
chcp 850>nul
Gruß Phil