blackhawk386
Goto Top

Tilde Zeichen per Batch ersetzen

Hi!

Ich habe eine Datei in Textform, in der Umlaute per Batch umgewandelt werden müssen. Dazu habe ich hier auch schon die prinzipielle Lösung gefunden welche auch super Funktioniert. Dummerweise bestehen die Umlaute in der original Datei aus Sonderzeichen. Nun stehe ich vor dem Problem, dass das "ß" als Tilde "~" vorliegt.

Lässt sich das ~ Zeichen per Batch in ein ß umwandeln?
Weder ^~ noch '~' oder "~" funktionieren...

Vielen Dank!

Grüße,
Blackhawk

Content-ID: 273602

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

Ausgedruckt am: 25.11.2024 um 01:11 Uhr

Clijsters
Lösung Clijsters 02.06.2015, aktualisiert am 03.06.2015 um 08:19:58 Uhr
Goto Top
Hallo Blackhawk,

ich kann deine Frage leider auch nicht ganz beantworten, aber ich habe deswegen mal etwas herumgespielt.

Was ich auch tuhe, das ~ muss ich eigentlich nicht escapen. Ich muss nur witzigerweise dafür sorgen, dass es nicht alleine auftritt.
Dann ging es.
Mit dem ß war es auch nicht sehr simpel.

Folgendes hat bei mir geklappt:
::@echo off
setlocal enableDelayedExpansion

set "toreplace=a~"  
set "tocheck=das macht Spa~, oder nicht?"  

set "result=!tocheck:%toreplace%=ass!"  
echo !result!

::--------------------------
">>>tildeTest.bat  
">>>setlocal enableDelayedExpansion  
">>>set "toreplace=a~"  
">>>set "tocheck=das macht Spa~, oder nicht?"  
">>>set "result=!tocheck:a~=ass!"  
">>>echo !result!  
das macht Spass, oder nicht?
">>>  
Das Problem ist, dass ich hier einen Buchstaben angegeben habe, welcher dem ~ vorsteht. Alleinstehend hat es nicht funktioniert...

Vielleicht ein Workaround?
Einem ß sollte ja immer (wenn es deutscher Text ist) ein Umlaut bevorstehen. so viele sind das nicht face-wink


Beste Grüße
Dominique
rubberman
Lösung rubberman 02.06.2015, aktualisiert am 03.06.2015 um 08:20:33 Uhr
Goto Top
Hallo Blackhawk.

Die Tilde gehört zu den Zeichen (neben * und =) die sich nicht mit der "normalen" Textersetzung innerhalb einer Variable behandeln lassen. Hier gibt es nur unschöne und mehr oder weniger unsichere Workarounds. Bsp.:
@echo off &setlocal
set "var1=Schweinefra~ mit So~e!"  
set "var2="  

>nul chcp 1252
set "sz=ß"  
>nul chcp 850
:loop
for /f "tokens=1* delims=~" %%i in ("%var1%") do (  
  set "var1=%%j"  
  if defined var1 (
    set "var2=%var2%%%i%sz%"  
    goto loop
  ) else (
    set "var2=%var2%%%i"  
  )
)
echo %var2%
pause
Grüße
rubberman
Blackhawk386
Blackhawk386 03.06.2015 aktualisiert um 08:38:18 Uhr
Goto Top
Danke, habe es mit vorangestellten Buchstaben hin bekommen. Nicht schön, aber es funktioniert! face-smile
Und danke für den Hinweis, dass ß nur nach Umlauten kommt. Ich hätte das vermutlich erst gemerkt, nachdem ich das komplette Alphabet eingegeben habe. face-big-smile

Grüße
rubberman
rubberman 03.06.2015 um 18:07:51 Uhr
Goto Top
Und danke für den Hinweis, dass ß nur nach Umlauten kommt.
Das ist falsch!
Daumenregel: ß folgt auf lang gesprochene Vokale und Umlaute, sowie Doppelvokale (Ruß, groß, müßig, reißen, schließen, draußen). Bei kurzen Vokalen ist es den neuen Rechtschreibgeboten zufolge zum ss geworden (Fass, Fluss, muss, dass, Missverständnis).

Die tatsächlichen Regeln findest du natürlich im Duden ...

Grüße
rubberman
Biber
Biber 03.06.2015 aktualisiert um 18:54:55 Uhr
Goto Top
[OT]
... mal ganz abgesehen von Ostseehalbinseln wie zum Beispiel Darß, siehe de.wikipedia.org/wiki/Darß

[/OT]
Clijsters
Clijsters 03.06.2015 aktualisiert um 20:03:10 Uhr
Goto Top
[OT]
Ich nehme mal an (und halte es für selbstverständlich), dass mit umlauten Vokale gemeint sind... face-wink


Lg

Edit: Ich hab's auch verbockt...

@Biber: das hätte ich nicht gewusst.
Nun denn, workaround bleibt workaround.
[/OT]