joe65
Goto Top

Problem mit bestimmten Umlaut

Hallo,

ich muss nochmal hier nachfragen, da ich mit einen Umlaut (=ß) ein Problem habe und ich nicht weiterkomme.
Über eine Batch-Routine versuche ich Umlaute (Ä,Ö,Ü,ä,ö,ü,ß) umzubenennen. Das klappt auch, bis auf den Umlaut "ß".

Folgenden Code dazu:
@echo off
setlocal enabledelayedexpansion
cls
mode con: cols=130 lines=50
chcp 1252

call :RenameUmlaute ad
call :RenameUmlaute a-d
pause
exit /b

:RenameUmlaute
for /f "delims=" %%i in ('dir /s /b /%1 d:\test') do (  
  set stringorg=%%~nxi
  set stringnew=!stringorg!

  call set stringnew=%%stringnew:Ä=Ae%%
  call set stringnew=%%stringnew:Ö=Oe%%
  call set stringnew=%%stringnew:Ü=Ue%%
  call set stringnew=%%stringnew:ä=ae%%
  call set stringnew=%%stringnew:ö=oe%%
  call set stringnew=%%stringnew:ü=ue%%
  call set stringnew=%%stringnew:ß=ss%%

  echo stringorg=!stringorg!
  echo stringnew=!stringnew!
  pause

  if not !stringorg!==!stringnew! (
    rename "%%~fi" "!stringnew!"  
  )
)

Obwohl auch bei "ß" die Variablen stringorg und stringnew verschieden sind wird der rename Befehl trotzdem nicht ausgeführt.
Hat jemand eine Idee woran das liegen mag?
Ich arbeite mit Windows 7.

Grüße
joe65

Content-ID: 240619

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

Ausgedruckt am: 25.11.2024 um 15:11 Uhr

Xaero1982
Xaero1982 11.06.2014 aktualisiert um 23:20:48 Uhr
Goto Top
Nabend,

also ich bastel nun schon nen bisschen dran rum, aber letztlich steh ich da wo Bastla auch im anderen Beitrag stand:

@echo off
setlocal enabledelayedexpansion

setlocal&for /f "tokens=2 delims=:" %%a in ('chcp') do (set /a oemcp=%%~na&chcp 1252>nul)  
for /f "tokens=1-7" %%a in ('echo Ä Ö Ü ä ö ü ß^&chcp %oemcp%^>nul') do (  
set au=%%a&set ou=%%b&set uu=%%c&set al=%%d&set ol=%%e&set ul=%%f&set sz=%%g)
(endlocal&set Ä=%au%&set Ö=%ou%&set Ü=%uu%&set ä=%al%&set ö=%ol%&set ü=%ul%&set ß=%sz%)


call :RenameUmlaute ad
call :RenameUmlaute a-d
pause
exit /b

:RenameUmlaute
for /f "delims=" %%i in ('dir /s /b /%1 test') do (  
  set stringorg=%%~nxi
  set stringnew=!stringorg!

  call set stringnew=%%stringnew:%Ä%=Ae%%
  call set stringnew=%%stringnew:%Ö%=Oe%%
  call set stringnew=%%stringnew:%Ü%=Ue%%
  call set stringnew=%%stringnew:%ä%=ae%%
  call set stringnew=%%stringnew:%ö%=oe%%
  call set stringnew=%%stringnew:%ü%=ue%%
  call set stringnew=%%stringnew:%ß%=ss%%

  echo stringorg=!stringorg!
  echo stringnew=!stringnew!
  if !stringorg!==!stringnew! echo "Stimmt!"  
  pause


  if not !stringorg!==!stringnew! (
    rename "%%~fi" "!stringnew!"  
  )
)

Ich hab das bissel geändert(zusammengeklaut) und in der Zeile:
if !stringorg!==!stringnew! echo "Stimmt!"  
liegt der Hase begraben, denn was sagt die Ausgabe?

stringorg=_ß.txt
stringnew=_ss.txt
"Stimmt"  

Obwohl jeder sieht, dass _ß.txt und _ss.txt verschieden sind ist Windows der Meinung sie sind identisch.

Eine wirkliche Idee hab ich nicht mehr.

Außer hartgecodet:

@echo off
setlocal enabledelayedexpansion

setlocal&for /f "tokens=2 delims=:" %%a in ('chcp') do (set /a oemcp=%%~na&chcp 1252>nul)  
for /f "tokens=1-7" %%a in ('echo Ä Ö Ü ä ö ü ß^&chcp %oemcp%^>nul') do (  
set au=%%a&set ou=%%b&set uu=%%c&set al=%%d&set ol=%%e&set ul=%%f&set sz=%%g)
(endlocal&set Ä=%au%&set Ö=%ou%&set Ü=%uu%&set ä=%al%&set ö=%ol%&set ü=%ul%&set ß=%sz%)


call :RenameUmlaute ad
call :RenameUmlaute a-d
pause
exit /b

:RenameUmlaute
for /f "delims=" %%i in ('dir /s /b /%1 test') do (  
  set stringorg=%%~nxi
  set stringnew=!stringorg!

  call set stringnew=%%stringnew:%Ä%=Ae%%
  call set stringnew=%%stringnew:%Ö%=Oe%%
  call set stringnew=%%stringnew:%Ü%=Ue%%
  call set stringnew=%%stringnew:%ä%=ae%%
  call set stringnew=%%stringnew:%ö%=oe%%
  call set stringnew=%%stringnew:%ü%=ue%%
  call set stringnew=%%stringnew:%ß%=ss%%

  echo stringorg=!stringorg!
  echo stringnew=!stringnew!

  pause


  if not !stringorg!==!stringnew! (
    rename "%%~fi" "!stringnew!"  
  )
  echo !stringorg!|find "%ß%" && rename "%%~fi" "!stringnew!"  
)

Hier:
echo !stringorg!|find "%ß%" && rename "%%~fi" "!stringnew!"   
wird lediglich geschaut, ob in dem Originalstring ein ß vorhanden ist und wenn ja (&&) wird diese Datei umbenannt.

Gruß
Xaero1982
Xaero1982 11.06.2014 um 23:38:15 Uhr
Goto Top
Das zeigt es noch mal ganz klar:

echo on
chcp 1252

if ä==ae echo "Stimmt - ä=ae"  
if ü==ue echo "Stimmt - ü=ue"  
if ö==oe echo "Stimmt - ö=oe"  
if ß==ss echo "Stimmt - ß=ss"  
if Ä==Ae echo "Stimmt - Ä=Ae"  
if Ü==Ue echo "Stimmt - Ü=Ue"  
if Ö==Oe echo "Stimmt - Ö=Oe"  

pause

Ergebnis:

echo on 

chcp 1252 
Aktive Codepage: 1252.

if ä == ae echo "Stimmt - ä=ae"   

if ü == ue echo "Stimmt - ü=ue"   

if ö == oe echo "Stimmt - ö=oe"   

if ß == ss echo "Stimmt - ß=ss"   
"Stimmt - ß=ss"  

if Ä == Ae echo "Stimmt - Ä=Ae"   

if Ü == Ue echo "Stimmt - Ü=Ue"   

if Ö == Oe echo "Stimmt - Ö=Oe"   

pause
Drücken Sie eine beliebige Taste . . . 
Xaero1982
Xaero1982 13.06.2014 aktualisiert um 18:57:52 Uhr
Goto Top
Ist das jetzt eigentlich erledigt?
Na online warste ja immerhin... ist ja dann wohl erledigt ...

Dann bitte noch auf gelöst setzen face-smile
joe65
joe65 15.06.2014 um 17:55:53 Uhr
Goto Top
Hallo Xaero1982,

gelöst ist die Sache nicht, es sei denn man könnte über ein Batch-Script prinzipiell "ß" und "ss" nicht unterscheiden.
Eine Unterscheidung ist aber möglich, denn wenn man im "stringorg" neben dem "ß" noch einen weiteren Umlaut hat, dann wird das "ß" korrekt in "ss" umgewandelt. Nur wenn der "stringorg" nur eine "ß" enthält funktioniert das nicht! Es muss also einen Grund geben, warum das bei "ß" + weiteren Umlaut geht und bei nur einem "ß" nicht.

Grüße
joe65
Xaero1982
Lösung Xaero1982 15.06.2014, aktualisiert am 17.06.2014 um 19:18:40 Uhr
Goto Top
Du hast recht ... klingt merkwürdig, aber klappt in der Tat. Mal sehen...

Gruß
Edit: Ist schon spät, aber das ist total logisch, weil:

ß=ss
ßö!=ssoe
deswegen nennt er es um.

So lange die Batch "meint", dass ß=ss ist wirds nicht gehen. Wie du oben auch in meinem Beispiel siehst sind ist ö nicht gleich oe usw. ß ist aber gleich ss

edit2: offenbar bekanntes Problem..http://www.technologische-hilfe.de/039-ss-039-039-039-sind-die-gleich-s ...
joe65
joe65 17.06.2014 um 19:22:41 Uhr
Goto Top
Hallo Xaero1982,

da anscheinend ß und ss nicht unterschieden werden können werde ich die Frage schließen.
Danke für deinen Beitrag.

Grüße
joe65