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-Key: 240619

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

Printed on: April 24, 2024 at 17:04 o'clock

Member: Xaero1982
Xaero1982 Jun 11, 2014 updated at 21:20:48 (UTC)
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ß
Member: Xaero1982
Xaero1982 Jun 11, 2014 at 21:38:15 (UTC)
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 . . . 
Member: Xaero1982
Xaero1982 Jun 13, 2014 updated at 16:57:52 (UTC)
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
Member: joe65
joe65 Jun 15, 2014 at 15:55:53 (UTC)
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
Member: Xaero1982
Solution Xaero1982 Jun 15, 2014, updated at Jun 17, 2014 at 17:18:40 (UTC)
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 ...
Member: joe65
joe65 Jun 17, 2014 at 17:22:41 (UTC)
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