Umlaute in Dateinamen per Batch ändern
In mehreren Dateinamen die Umlaute ersetzen
Hallo zusammen,
ich habe folgendes Problem:
ich möchte unter Windows 2000/XP in Dateinamen (in einem beliebigen Ordner und allen seinen Unterordnern) Umlaute und das "ß" ersetzen. Ä durch ae, ß durch ss etc. Es handelt sich insgesamt um viele Ordner auf einigen Rechnern, so dass ich gerne eine Automatisierung hätte.
Ich habe hierzu versucht, eine Batchdatei zu schreiben. Leider sind meine Kenntnisse auf dem Gebiet praktisch nicht vorhanden. Die Suche hier im Forum und im Netz war erfolglos, das einzige, was in etwa in meine Richtung geht, ist folgendes:
@echo off
set chars=„ ” � á
for /F %%a in ('dir /b *.*') do (
for %%m in (%chars%) do (
echo %%a | find /i "%%m">nul && echo schlecht: [%%m] in %%a
)
call :replace "%%a"
)
pause>nul
exit
:replace
set newname=%1
set newname=%newname:„=ae%
set newname=%newname:”=oe%
set newname=%newname:�=ue%
set newname=%newname:á=ss%
if NOT "%newname%"=="%1" echo ----- Vorschlag zum Umbenennen: && echo VON : %1 && echo NACH: %newname% && echo.
Doch hier findet zum Einen keine Ersetzung statt, aber entscheiden ist: nach einem Leerzeichen werden die Umlaute etc. nicht gefunden. Bsp.: öä ß.txt, hier wird nur ö und ä gefunden, nicht aber das ß. Ich weiß, Leerzeichen in Dateineme sind schlecht, meinen Mitarbeitern ist das aber nicht abzugewöhnen. Ich hoffe, hier weiß jemand dazu Rat, ich bin für jede Hilfe oder Anregung offen.
Vielen Dank und viele Grüße,
Tillixx
ich habe folgendes Problem:
ich möchte unter Windows 2000/XP in Dateinamen (in einem beliebigen Ordner und allen seinen Unterordnern) Umlaute und das "ß" ersetzen. Ä durch ae, ß durch ss etc. Es handelt sich insgesamt um viele Ordner auf einigen Rechnern, so dass ich gerne eine Automatisierung hätte.
Ich habe hierzu versucht, eine Batchdatei zu schreiben. Leider sind meine Kenntnisse auf dem Gebiet praktisch nicht vorhanden. Die Suche hier im Forum und im Netz war erfolglos, das einzige, was in etwa in meine Richtung geht, ist folgendes:
@echo off
set chars=„ ” � á
for /F %%a in ('dir /b *.*') do (
for %%m in (%chars%) do (
echo %%a | find /i "%%m">nul && echo schlecht: [%%m] in %%a
)
call :replace "%%a"
)
pause>nul
exit
:replace
set newname=%1
set newname=%newname:„=ae%
set newname=%newname:”=oe%
set newname=%newname:�=ue%
set newname=%newname:á=ss%
if NOT "%newname%"=="%1" echo ----- Vorschlag zum Umbenennen: && echo VON : %1 && echo NACH: %newname% && echo.
Doch hier findet zum Einen keine Ersetzung statt, aber entscheiden ist: nach einem Leerzeichen werden die Umlaute etc. nicht gefunden. Bsp.: öä ß.txt, hier wird nur ö und ä gefunden, nicht aber das ß. Ich weiß, Leerzeichen in Dateineme sind schlecht, meinen Mitarbeitern ist das aber nicht abzugewöhnen. Ich hoffe, hier weiß jemand dazu Rat, ich bin für jede Hilfe oder Anregung offen.
Vielen Dank und viele Grüße,
Tillixx
Please also mark the comments that contributed to the solution of the article
Content-Key: 50977
Url: https://administrator.de/contentid/50977
Printed on: April 24, 2024 at 08:04 o'clock
3 Comments
Latest comment
Moin tillixx07,
willkommen im Forum.
Zwei Antworten vorab:
- natürlich "gibt es eine Möglichkeit", mit Batch derlei Umbenennungen durchzuführen.
- zum anderen ist Dein Ansatz eigentlich auch korrekt und lauffähig.
Ein Klemmer sind die "Dateinamen mit Leerzeichen", die nicht aufgelöst werden.
Dazu muss nur erweitert werden von
Was die Umlaut-Ersetzung angeht, machst Du Dir das Leben unnötig schwer.
Da kannst mit an Sicherheit grenzender Wahrscheinlichkeit die z.B im Office oder Explorer "entstandenen" Dateinamen, in denen ein über Tastatur eingegebenes ä, ü oder ß enthalten ist, auch im Batch/ am CMD-Prompt als ä, ü oder ß anzeigen lassen.
Und brauchst nicht diesen Umweg über diese kryptischen Zeichen gehen.
Das stellst Du mit dem Befehl CHCP ein.
Am CMD-Prompt: CHCP -------->zeigt die akuelle Codepage an. Normalerweise 850.
Wechseln auf windows/GUI-konforme Codepage: CHCP 1252.
Der Effekt ist der gleiche, ob Du nun mit Codepage 850 schreibst:
Gruss
Biber
willkommen im Forum.
Zwei Antworten vorab:
- natürlich "gibt es eine Möglichkeit", mit Batch derlei Umbenennungen durchzuführen.
- zum anderen ist Dein Ansatz eigentlich auch korrekt und lauffähig.
Ein Klemmer sind die "Dateinamen mit Leerzeichen", die nicht aufgelöst werden.
Dazu muss nur erweitert werden von
for /F %%a in ('dir /b *.*') do ( [....something with %%a...]
...auf...
for /F "delims=" %%a in ('dir /b *.*') do ( [....something with "%%a"...]
...auf...
for /F "delims=" %%a in ('dir /b *.*') do ( [....something with "%%a"...]
Was die Umlaut-Ersetzung angeht, machst Du Dir das Leben unnötig schwer.
Da kannst mit an Sicherheit grenzender Wahrscheinlichkeit die z.B im Office oder Explorer "entstandenen" Dateinamen, in denen ein über Tastatur eingegebenes ä, ü oder ß enthalten ist, auch im Batch/ am CMD-Prompt als ä, ü oder ß anzeigen lassen.
Und brauchst nicht diesen Umweg über diese kryptischen Zeichen gehen.
Das stellst Du mit dem Befehl CHCP ein.
Am CMD-Prompt: CHCP -------->zeigt die akuelle Codepage an. Normalerweise 850.
Wechseln auf windows/GUI-konforme Codepage: CHCP 1252.
Der Effekt ist der gleiche, ob Du nun mit Codepage 850 schreibst:
>for /f "delims=" %i in ('dir /s /b t:\*stcklistenpr*.*') do @set "old=%~nxi" & @echo rename "%i" !old:=ue!
rename "t:\Anforderungen\Stcklistenprfung.doc" Stuecklistenpruefung.doc
--oder ---
>chcp 1252
Aktive Codepage: 1252.
>for /f "delims=" %i in ('dir /s /b t:\*stücklistenprü*.*') do @set "old=%~nxi" & @echo rename "%i" !old:ü=ue!
rename "t:\Anforderungen\Stücklistenprüfung.doc" Stuecklistenpruefung.doc
Gruss
Biber