Batch – Arbeiten mit Dateien mit Umlauten im Dateinamen

In früheren Posts habe ich bereits typische Probleme mit Batch und Umlauten, sowieso Umlauten und dem Copyrightsymbol behandelt. Die Artikel beschreiben aber nur die Darstellung von Umlauten und dem Copyrightsymbol. Probleme können jedoch auch bei der Verarbeitung von Daten mit Umlauten auftreten, beispielsweise beim Kopieren von Dateien mit Umlauten im Dateinamen.

2 Beispielcodes, die nicht funktionieren:

:: 1
xcopy stundenpläne.xlsx /test/

:: 2
for /f "tokens=*" %%a in (files.txt) do (
  xcopy "%~dp0%%a" "%~dp0test\%%a*" /Y
)

batch-umlaute-im-dateinamen-falsche-methode

Thomas, ein Leser, war so freundlich und schickte mir einen Code, der mit Umlauten in Dateinamen problemlos klarkommt.
Dieser Code nutzt ebenfalls Codepage Tricks um mit Umlauten in Dateinamen umgehen zu können:

:: Wechsele die Codepage, sonst kommen wir nicht im Umlauten in Dateinamen klar! (erst alte codepage speichern)
for /f "tokens=2 delims=:." %%a in ('chcp') do set alteCP=%%a
chcp 65001 >NUL

:: Finde alle referenzierten Dateien und lege sie in den Zielordner
for /f "tokens=*" %%a in (files.txt) do (
  :: Jetzt kopieren. Der Asterisk am Ende vermeidet, dass xcopy eine manuelle Eingabe erfordert.
  xcopy /Y "%~dp0%%a" "%~dp0test\%%a*"
)

:: Aufräumen.
chcp %alteCP% >NUL

Das einzig spezielle in dem Code ist der Stern im xcopy Befehl. Dieser verhindert, dass eine Eingabe vom Nutzer gefordert wird, wenn der Zielordner noch nicht existiert.

Schreibe einen Kommentar