Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Problem mit bestimmten Umlaut

Frage Entwicklung Batch & Shell

Mitglied: joe65

joe65 (Level 1) - Jetzt verbinden

11.06.2014, aktualisiert 17.06.2014, 1070 Aufrufe, 6 Kommentare

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:
01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
cls 
04.
mode con: cols=130 lines=50 
05.
chcp 1252 
06.
 
07.
call :RenameUmlaute ad 
08.
call :RenameUmlaute a-d 
09.
pause 
10.
exit /b 
11.
 
12.
:RenameUmlaute 
13.
for /f "delims=" %%i in ('dir /s /b /%1 d:\test') do ( 
14.
  set stringorg=%%~nxi 
15.
  set stringnew=!stringorg! 
16.
 
17.
  call set stringnew=%%stringnew:Ä=Ae%% 
18.
  call set stringnew=%%stringnew:Ö=Oe%% 
19.
  call set stringnew=%%stringnew:Ü=Ue%% 
20.
  call set stringnew=%%stringnew:ä=ae%% 
21.
  call set stringnew=%%stringnew:ö=oe%% 
22.
  call set stringnew=%%stringnew:ü=ue%% 
23.
  call set stringnew=%%stringnew:ß=ss%% 
24.
 
25.
  echo stringorg=!stringorg! 
26.
  echo stringnew=!stringnew! 
27.
  pause 
28.
 
29.
  if not !stringorg!==!stringnew! ( 
30.
    rename "%%~fi" "!stringnew!" 
31.
32.
)
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
Mitglied: Xaero1982
11.06.2014, aktualisiert um 23:20 Uhr
Nabend,

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

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
 
04.
setlocal&for /f "tokens=2 delims=:" %%a in ('chcp') do (set /a oemcp=%%~na&chcp 1252>nul) 
05.
for /f "tokens=1-7" %%a in ('echo Ä Ö Ü ä ö ü ß^&chcp %oemcp%^>nul') do ( 
06.
set au=%%a&set ou=%%b&set uu=%%c&set al=%%d&set ol=%%e&set ul=%%f&set sz=%%g) 
07.
(endlocal&set Ä=%au%&set Ö=%ou%&set Ü=%uu%&set ä=%al%&set ö=%ol%&set ü=%ul%&set ß=%sz%) 
08.
 
09.
 
10.
call :RenameUmlaute ad 
11.
call :RenameUmlaute a-d 
12.
pause 
13.
exit /b 
14.
 
15.
:RenameUmlaute 
16.
for /f "delims=" %%i in ('dir /s /b /%1 test') do ( 
17.
  set stringorg=%%~nxi 
18.
  set stringnew=!stringorg! 
19.
 
20.
  call set stringnew=%%stringnew:%Ä%=Ae%% 
21.
  call set stringnew=%%stringnew:%Ö%=Oe%% 
22.
  call set stringnew=%%stringnew:%Ü%=Ue%% 
23.
  call set stringnew=%%stringnew:%ä%=ae%% 
24.
  call set stringnew=%%stringnew:%ö%=oe%% 
25.
  call set stringnew=%%stringnew:%ü%=ue%% 
26.
  call set stringnew=%%stringnew:%ß%=ss%% 
27.
 
28.
  echo stringorg=!stringorg! 
29.
  echo stringnew=!stringnew! 
30.
  if !stringorg!==!stringnew! echo "Stimmt!" 
31.
  pause 
32.
 
33.
 
34.
  if not !stringorg!==!stringnew! ( 
35.
    rename "%%~fi" "!stringnew!" 
36.
37.
38.
 
Ich hab das bissel geändert(zusammengeklaut) und in der Zeile:
01.
if !stringorg!==!stringnew! echo "Stimmt!"
liegt der Hase begraben, denn was sagt die Ausgabe?

01.
stringorg=_ß.txt 
02.
stringnew=_ss.txt 
03.
"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:

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
 
04.
setlocal&for /f "tokens=2 delims=:" %%a in ('chcp') do (set /a oemcp=%%~na&chcp 1252>nul) 
05.
for /f "tokens=1-7" %%a in ('echo Ä Ö Ü ä ö ü ß^&chcp %oemcp%^>nul') do ( 
06.
set au=%%a&set ou=%%b&set uu=%%c&set al=%%d&set ol=%%e&set ul=%%f&set sz=%%g) 
07.
(endlocal&set Ä=%au%&set Ö=%ou%&set Ü=%uu%&set ä=%al%&set ö=%ol%&set ü=%ul%&set ß=%sz%) 
08.
 
09.
 
10.
call :RenameUmlaute ad 
11.
call :RenameUmlaute a-d 
12.
pause 
13.
exit /b 
14.
 
15.
:RenameUmlaute 
16.
for /f "delims=" %%i in ('dir /s /b /%1 test') do ( 
17.
  set stringorg=%%~nxi 
18.
  set stringnew=!stringorg! 
19.
 
20.
  call set stringnew=%%stringnew:%Ä%=Ae%% 
21.
  call set stringnew=%%stringnew:%Ö%=Oe%% 
22.
  call set stringnew=%%stringnew:%Ü%=Ue%% 
23.
  call set stringnew=%%stringnew:%ä%=ae%% 
24.
  call set stringnew=%%stringnew:%ö%=oe%% 
25.
  call set stringnew=%%stringnew:%ü%=ue%% 
26.
  call set stringnew=%%stringnew:%ß%=ss%% 
27.
 
28.
  echo stringorg=!stringorg! 
29.
  echo stringnew=!stringnew! 
30.
 
31.
  pause 
32.
 
33.
 
34.
  if not !stringorg!==!stringnew! ( 
35.
    rename "%%~fi" "!stringnew!" 
36.
37.
  echo !stringorg!|find "%ß%" && rename "%%~fi" "!stringnew!" 
38.
)
Hier:
01.
echo !stringorg!|find "%ß%" && rename "%%~fi" "!stringnew!" 
wird lediglich geschaut, ob in dem Originalstring ein ß vorhanden ist und wenn ja (&&) wird diese Datei umbenannt.

Gruß
Bitte warten ..
Mitglied: Xaero1982
11.06.2014 um 23:38 Uhr
Das zeigt es noch mal ganz klar:

01.
echo on 
02.
chcp 1252 
03.
 
04.
if ä==ae echo "Stimmt - ä=ae" 
05.
if ü==ue echo "Stimmt - ü=ue" 
06.
if ö==oe echo "Stimmt - ö=oe" 
07.
if ß==ss echo "Stimmt - ß=ss" 
08.
if Ä==Ae echo "Stimmt - Ä=Ae" 
09.
if Ü==Ue echo "Stimmt - Ü=Ue" 
10.
if Ö==Oe echo "Stimmt - Ö=Oe" 
11.
 
12.
pause
Ergebnis:

01.
 
02.
echo on  
03.
 
04.
chcp 1252  
05.
Aktive Codepage: 1252. 
06.
 
07.
if ä == ae echo "Stimmt - ä=ae"  
08.
 
09.
if ü == ue echo "Stimmt - ü=ue"  
10.
 
11.
if ö == oe echo "Stimmt - ö=oe"  
12.
 
13.
if ß == ss echo "Stimmt - ß=ss"  
14.
"Stimmt - ß=ss" 
15.
 
16.
if Ä == Ae echo "Stimmt - Ä=Ae"  
17.
 
18.
if Ü == Ue echo "Stimmt - Ü=Ue"  
19.
 
20.
if Ö == Oe echo "Stimmt - Ö=Oe"  
21.
 
22.
pause 
23.
Drücken Sie eine beliebige Taste . . . 
Bitte warten ..
Mitglied: Xaero1982
13.06.2014, aktualisiert um 18:57 Uhr
Ist das jetzt eigentlich erledigt?
Na online warste ja immerhin... ist ja dann wohl erledigt ...

Dann bitte noch auf gelöst setzen
Bitte warten ..
Mitglied: joe65
15.06.2014 um 17:55 Uhr
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
Bitte warten ..
Mitglied: Xaero1982
LÖSUNG 15.06.2014, aktualisiert 17.06.2014
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 ...
Bitte warten ..
Mitglied: joe65
17.06.2014 um 19:22 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...

Windows Netzwerk
gelöst Problem mit PSexec64 von Sysinternals (8)

Frage von MaxMoritz6 zum Thema Windows Netzwerk ...

Windows Server
gelöst Problem nach DC-Installation unter Server 2012 R2 (9)

Frage von manuel1985 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...