joe65
Goto Top

Umlaute in Dateinamen abändern

Hallo,

gleich vorweg, es gibt bereits so einen Fall vom 07.02.2007 mit den Titel "Umlaute in Dateinamen per Batch ändern", den damals Biber gelöst hat.
Ich habe das Beispiel probiert, es funktioniert aber bei mir nicht. Ich weiß auch nicht was das für Umlaute sein sollen, die dort mit set chars=„ ” � definiert wurden.
Ein kleines "ä" wäre doch eigentlich durch set chars=&#228 (Codepage 850 ist bei mir eingesetellt.) zu setzen.

Mein Problem ist wie folgt:
Ich möchte alle Dateinamen, die die Umlaute ä,Ä,ö,Ö,ü,Ü enthalten durch ae,Ae,oe,Oe,ue,Ue ersetzen.
Dazu habe ich das Beispiel von Jahr 2007 mal angepasst. Funktioniert aber auch nicht.

@echo off

rem ä=&#228
rem Ä=&#196
rem ö=&#2
rem Ö=&#214
rem ü=&#252
rem Ü=&#220

set chars=ä Ä  Ö ü &#220

for /f "delims=" %%a in ('dir /s /b D:\Test\*.*') 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:Ä=Ae%
set newname=%newname:=oe%
set newname=%newname:Ö=Oe%
set newname=%newname:ü=ue%
set newname=%newname:Ü=Ue%

Ich verwende als Betriebssystem Windows 7.

Grüße
joe65

Content-Key: 239559

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

Printed on: April 16, 2024 at 19:04 o'clock

Member: Xaero1982
Solution Xaero1982 May 29, 2014, updated at May 31, 2014 at 17:54:57 (UTC)
Goto Top
Hi,

Umlaute in Dateinamen per Batch ändern

was genau hast du da angepasst? Du hast doch den Code vom Ersteller kopiert und der ging ja nicht.

Den Code von Biber hast du in meinen Augen nicht mal angetastet...

Gruß
Member: bastla
Solution bastla May 29, 2014, updated at May 31, 2014 at 17:55:00 (UTC)
Goto Top
Hallo joe65!

Falls Du nix gegen VBS hättest, könntest Du ev auch in Mit VB Script Sonderzeichen entfernen. eine Möglichkeit finden ...

Grüße
bastla
Member: joe65
joe65 May 30, 2014 at 11:18:38 (UTC)
Goto Top
Hallo Xaero1982,

ja, ich hab den Code vom Ersteller kopiert und wie folgt angepasst:
- set chars=ä Ä  Ö ü &#220 (habe ich andere Werte genommen, da nach Codepage 850 diese Werte stimmen sollten)
- "delims=" hinzugefügt.

Das habe ich gemacht, weil Biber damals folgendes bemerkt hat:
- zum anderen ist Dein Ansatz eigentlich auch korrekt und lauffähig.
- Ein Klemmer sind die "Dateinamen mit Leerzeichen", die nicht aufgelöst werden. --> deshalb habe ich das "delims=" dazugemacht.

Grüße
joe65
Member: joe65
joe65 May 31, 2014 at 17:54:21 (UTC)
Goto Top
Hallo bastla,

Danke für den Link auf das VB Script.

Ich glaube, ich habe jetzt auch eine Lösung mittels Batch-Script gefunden. Du kannst sie dir ja mal anschauen. Scheint jedenfalls zu funktionieren.
Die Frage werde ich schließen.
@echo off
setlocal enabledelayedexpansion
chcp 1252

set "Resultdatei=Umlaute.txt"  
set "LOG_DIR=D:\Meine_Dateien\Log"  

for /f "delims=" %%i in ('dir /s /b /a-d d:\test\*.*') do (  
  set string=%%~nxi
  set stringnew=%%~nxi

  set findset replace=Ae
  call set stringnew=%%stringnew:!find!=!replace!%%

  set findset replace=Oe
  call set stringnew=%%stringnew:!find!=!replace!%%

  set findset replace=Ue
  call set stringnew=%%stringnew:!find!=!replace!%%

  set findset replace=ae
  call set stringnew=%%stringnew:!find!=!replace!%%
  
  set findset replace=oe
  call set stringnew=%%stringnew:!find!=!replace!%%
  
  set findset replace=ue
  call set stringnew=%%stringnew:!find!=!replace!%%

  if !string! NEQ !stringnew! (
    echo %%~fi --^> !stringnew! >> %LOG_DIR%\%Resultdatei%
    rem rename %%~fi !stringnew!
  )
)

Grüße
joe65
Member: bastla
bastla May 31, 2014 updated at 18:04:40 (UTC)
Goto Top
Hallo joe65!

Sollte so funktionieren, wobei Du eigentlich auf "delayedExpansion" verzichten könntest, indem Du einfach
call set "stringnew=%%stringnew:%find%=%replace%%%"
verwendest.

Mit "delayedExpansion" bräuchtest Du wiederum kein "call" und keine doppelten Prozentzeichen
set "stringnew=!stringnew:%find%=%replace%!"
wobei ich zur ersten Variante tendieren würde (Stichwort: "Dateinamen mit enthaltenen !") ...

Grüße
bastla
Member: joe65
joe65 Jun 02, 2014 at 17:47:41 (UTC)
Goto Top
Hallo bastla,

habe die "erste Variante" probiert. Geht bei mir dann aber nicht mehr. Das "delayedExpansion" habe ich dabei mit den REM Kommando auskommentiert.

Ich wollte bei meiner Version noch das "ß" durch "ss" ersetzten und habe deshalb den Code um die Zeilen
set findset replace=ss
call set stringnew=%%stringnew:!find!=!replace!%%
erweitert.
Leider wird mir das "ß" nicht ersetzt. Hast du eine Idee woran das liegt?

Grüße
joe65
Member: bastla
bastla Jun 03, 2014 at 05:35:12 (UTC)
Goto Top
Hallo joe65!

Wie gibt Du das "ß" denn ein? Wenn Du zB
echo "set find=ß">>DeinBatch.cmd
verwendest und im Editor die Zeile dann an die richtige Stelle verschiebst, hast Du zumindest die richtige Codierung ...

Grüße
bastla
Member: joe65
joe65 Jun 04, 2014 at 18:30:33 (UTC)
Goto Top
Hallo bastla,

ich verstehe nicht was Du meinst mit "Wie gibst Du das "ß" denn ein".
Laut Codepage 1252 wäre ein "ß" der Char 223. Müsste ich etwa eingeben: set find=223 oder sowas in der Art?

Grüße
joe65
Member: bastla
bastla Jun 04, 2014 updated at 19:30:26 (UTC)
Goto Top
Hallo joe65!
ich verstehe nicht was Du meinst mit "Wie gibst Du das "ß" denn ein".
Sorry - war auf der falschen Fährte ...

Tatsächlich wird das "ß" zwar ersetzt, aber es scheitert (mir) unerklärlicher Weise
if !string! NEQ !stringnew! (
- nachvollziehbar durch zB
if ß==ss echo gleich
Grüße
bastla