Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 1091 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 ..
Ähnliche Inhalte
PHP
gelöst PHP 7 und LDAP mit Umlauten (3)

Frage von wiesi200 zum Thema PHP ...

Internet Domänen
gelöst Domains mit Umlauten - ratsam oder eher meh? (8)

Frage von hesper zum Thema Internet Domänen ...

Batch & Shell
gelöst Umlaute in Powershell-Parametern (3)

Frage von Winfried-HH zum Thema Batch & Shell ...

Windows 10
gelöst Bestimmte Webseiten für bestimmte Anwendungen sperren (6)

Frage von montemonte zum Thema Windows 10 ...

Neue Wissensbeiträge
Multimedia

Raspberry Pi als Digital-Signage-Computer

(1)

Information von BassFishFox zum Thema Multimedia ...

Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(15)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
Freigabe aus anderem Netz nicht erreichbar (27)

Frage von McLion zum Thema Router & Routing ...

Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail (23)

Frage von ahstax zum Thema Visual Studio ...

Batch & Shell
Batch Programm verhalten bei shoutdown -p (19)

Frage von Michael-ITler zum Thema Batch & Shell ...

Festplatten, SSD, Raid
gelöst Raidcontroller funktioniert nur, wenn unter Legacy-Boot gestartet wird (14)

Frage von DerWoWusste zum Thema Festplatten, SSD, Raid ...