tillixx07
Goto Top

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

Content-ID: 50977

Url: https://administrator.de/contentid/50977

Ausgedruckt am: 24.11.2024 um 14:11 Uhr

tillixx07
tillixx07 19.02.2007 um 11:07:37 Uhr
Goto Top
Gibt es wirklich keine Möglichkeit, bestimmte Dateinamen auf einen Rutsch zu verändern? Vielleicht per vbs?

Falls es keine Möglichkeit gibt, würde mir auch diese Information genügen, dann muss ich mich nicht mehr damit herumschlagen. Mir sind daher auch Meinungen willkommen: z.B. Ich denke es geht nicht etc.


Viele Grüße
T.
Biber
Biber 19.02.2007 um 19:36:06 Uhr
Goto Top
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
for /F %%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:\*stcklistenpr*.*') do @set "old=%~nxi" & @echo rename "%i" !old:=ue!  
rename "t:\Anforderungen\Stcklistenprfung.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
tillixx07
tillixx07 20.02.2007 um 11:39:11 Uhr
Goto Top
Danke für die Antwort! Ich werde es probieren und dann eine Rückmeldung geben.

PS: Guter Tipp mit der Änderung der Codepage, ich hatte aus diesem Grund die Datei in der edit.com und nicht im Notepad o.ä. bearbeitet, da fallen die kryptischen Zeichen ebenfalls unter den Tisch. Für das Posting habe ich dann die fertige Batch mit dem Editor geöffnet, daher diese Zeichen. Ich wollte verhindern, dass die erste Antwort heißt: Klar dass es nicht funktioniert, da falsche Codepage. face-wink

Grüße
Tillixx