sarekhl
Goto Top

Umlaut in Batch klappt nicht immer

Hallo zusammen,

ich habe ein Problem mit der Wiedergabe von Umlauten in Batchdateien.

chcp 1252
"C:\Program Files\freac\freaccmd.exe" -d "D:\" "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav"  

del "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav" /Q  


Während die obere Zeile korrekt ausgeführt wird, wird in der unteren das ä durch ein kryptisches Zeichen wiedergegeben - und dann wird der Ordner natürlich nicht gefunden.

Ich habe mit die Datei mit notepad++ angeschaut, die ä's sind an beiden Stellen identisch, gleicher HEX-Code.

Woran kann das liegen?


Danke im Voraus
Sarek \\//_

Content-ID: 6236450578

Url: https://administrator.de/forum/umlaut-in-batch-klappt-nicht-immer-6236450578.html

Ausgedruckt am: 22.12.2024 um 12:12 Uhr

DerMaddin
DerMaddin 06.03.2023 um 07:29:12 Uhr
Goto Top
schon mal eine andere Zeichenkodierung versucht? Z.B. UTF-8?
SarekHL
SarekHL 06.03.2023 um 07:35:55 Uhr
Goto Top
schon mal eine andere Zeichenkodierung versucht?

Nein. Ich hänge vielmehr an der Frage, warum es an der einen Stelle klappt und an der nächsten nicht ...
DerMaddin
DerMaddin 06.03.2023 um 07:50:05 Uhr
Goto Top
Ich kann dir keine 100% Erklärung geben aber in der ersten Zeile wird eine Anwendung gestartet und Parameter übergeben und in der zweiten wird ein System-Kommando ausgeführt. Vielleicht verarbeiten beide das Zeichen "ä" unter Berücksichtigung von Windows-1252 Zeichenkodierung unterschiedlich.
StefanKittel
StefanKittel 06.03.2023 um 08:10:13 Uhr
Goto Top
Zitat von @SarekHL:
Woran kann das liegen?
Weil Windows "doof" ist?
Keine Ahnung warum das nicht geht, aber ein Tipp wie ich es mache.

Ich habe es aufgegeben mit Notepad++ und der Codierung zu fummeln.

ich führe ein "copy con test1.bat" in einem CMD fenster aus.
drücke die Tasten üöäÜÖÄß und dann Strg+Z.

Dann habe ich unlesbare aber funktionierende Sonderzeichen die ich innerhalb des Editors kopieren.

Stefan
chgorges
chgorges 06.03.2023 um 08:13:32 Uhr
Goto Top
Moin,

ich haue meinen Kunden auf die Finger, wenn sie Umlaute oder Leerzeichen in Ordner- und Dateinamen verwenden, der Bumerang kommt sonst irgendwann zurück.

VG
3063370895
3063370895 06.03.2023 um 08:18:59 Uhr
Goto Top
Zitat von @chgorges:

Moin,

ich haue meinen Kunden auf die Finger, wenn sie Umlaute oder Leerzeichen in Ordner- und Dateinamen verwenden, der Bumerang kommt sonst irgendwann zurück.

VG

Moin,

Definitiv die falsche Vorgehensweise. Ich würde meine Unfähigkeit mit Zeichenkodierung umzugehen niemals an meinen Kunden / Kollegen auslassen.
Xerebus
Xerebus 06.03.2023 um 08:30:52 Uhr
Goto Top
@chaot1coz
Ich vermute mal das du noch nicht soo alt bist.
"Es war damals" face-big-smile nicht nur die eigene Unfähigkeit, sondern die von viele Programmen die das einfach nicht konnten.
Und so ist man das halt noch gewöhnt sowas nicht in Pfade zu schreiben.
3063370895
3063370895 06.03.2023 um 08:33:28 Uhr
Goto Top
Zitat von @Xerebus:

@chaot1coz
Ich vermute mal das du noch nicht soo alt bist.
"Es war damals" face-big-smile nicht nur die eigene Unfähigkeit, sondern die von viele Programmen die das einfach nicht konnten.
Und so ist man das halt noch gewöhnt sowas nicht in Pfade zu schreiben.

Mein Alter tut hier nichts zur Sache. Dass schlechte Angewohnheiten von "damals" bis heute übernommen werden, ist nichts Ungewöhnliches - dennoch falsch.

Heutzutage gibt es keinen Grund mehr seine User mit sowas zu gängeln.
TwistedAir
TwistedAir 06.03.2023 um 09:05:39 Uhr
Goto Top
Moin @SarekHL,

ist die Batch-Datei auch im ANSI-Format (wegen "chcp 1252") gespeichert oder liegt sie noch in UTF-8 vor? Das kannst du unten in der Fußzeile von Notepad(++) sehen.

Gruß
TA
SarekHL
SarekHL 06.03.2023 um 09:45:09 Uhr
Goto Top
ist die Batch-Datei auch im ANSI-Format (wegen "chcp 1252") gespeichert

Ja ...
TK1987
TK1987 06.03.2023 um 10:13:51 Uhr
Goto Top
Moin,

versuche mal, die Batch mit Notepad++ in UTF-8 (ohne BOM) zu konvertieren und dann mit
chcp 65001
zu arbeiten. Das klappt i.d.R. deutlich besser bei Umlauten.

Gruß Thomas
SarekHL
SarekHL 06.03.2023 um 10:27:11 Uhr
Goto Top
versuche mal, die Batch mit Notepad++ in UTF-8 (ohne BOM) zu konvertieren

Hat nicht geklappt, im Gegenteil - damit geht auch die obere Zeile nicht mehr face-confused-alt
TK1987
TK1987 06.03.2023 aktualisiert um 10:39:55 Uhr
Goto Top
Zitat von @SarekHL:
versuche mal, die Batch mit Notepad++ in UTF-8 (ohne BOM) zu konvertieren
Hat nicht geklappt, im Gegenteil - damit geht auch die obere Zeile nicht mehr face-confused-alt
Hast du die Codepage 65001 denn auch aktiviert? Das funktioniert hier bei mir problemlos (zumindest mit der unteren zeile, da ich freaccmd nicht verwende).

Wenn du chcp 1252 nutzen willst, reicht es nicht, die Datei einfach nur in ANSI abzuspeichern. In dem Fall musst du im Notepad++ auf "Codierung > Weitere > Mitteleuropäisch > Windows-1250" stellen. Dann funktionieren die Umlaute innerhalb der Batch zwar, sobald du jedoch Umleitungsoperatoren verwendest (etwa um in eine Logdatei zu schreiben oder Text aus einer anderen Datei einzulesen), sind die Umlaute dort dann falsch. Dieses Problem besteht mit UTF-8 normalerweise nicht.

Gruß Thomas
SarekHL
SarekHL 06.03.2023 aktualisiert um 10:46:52 Uhr
Goto Top
Hast du die Codepage 65001 denn auch aktiviert?

Aktiviert? Also ich habe den Befehl in den Code geschrieben und in notepad++ bei der Codierung UTF-8 eingestellt. Muss man noch was tun?


In dem Fall musst du im Notepad++ auf "Codierung > Weitere > Mitteleuropäisch > Windows-1250" stellen

Dann geht es wieder in der oberen Zeile, in der unteren nach wie vor nicht.
colinardo
Lösung colinardo 06.03.2023 aktualisiert um 11:27:19 Uhr
Goto Top
Servus @SarekHL,
das Problem ist häufig das schlecht programmierte Kommandozeilenprogramme gerne mal die aktive Codepage der Konsole verändern oder sie missachten und sie nicht wieder zurücksetzen, platziere also mal testweise das chcp zusätzlich nach dem ersten Befehl
"C:\Program Files\freac\freaccmd.exe" -d "D:\" "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav"  
chcp 1252
del "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav" /Q  
Wenn es dann klappt ist das Programm welches du davor ausführst daran schuld
Alternativ kannst du das Programm selbst über start in einer separaten Konsole starten
chcp 1252
start "" /wait "C:\Program Files\freac\freaccmd.exe" -d "D:\" "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav"  
del "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav" /Q  

Grüße Uwe
WoenK0
WoenK0 06.03.2023 um 11:07:13 Uhr
Goto Top
Ich würds mal ohne Angabe von der Codepage versuchen, Pfad direkt aus dem Explorer rauskopieren und die Batch mit dem Standard Editor zu speichern.
Kann mich nicht erinnern das ich jemals bei einer Batch wegen Umlauten eine Codepage angeben musste.
mayho33
mayho33 06.03.2023 um 11:08:54 Uhr
Goto Top
Hi!

Umlaute sind und waren immer schon ein Problem. Das beschränkt sich nicht nur auf die Comspec.

Es gibt Bereiche im OS die sind nicht sprachunabhängig und lassen sich auch nicht ändern nur weil man einen anderen Zeichensatz auf der Tastatur verwendet.

Bsp:
https://learn.microsoft.com/en-us/dotnet/standard/language-independence

Wenn du ein Batch-Script erstellst kannst aber versuchen es mit UTF-8 oder UTF-8 mit BOM-Codierung zu speichern anstatt mit ANSI oder OEM und dann das *.cmd auszuführen.

ein weiterer Lösungsansatz:
www.libe.net/Robocopy-Umlaute

In C# kannst du die Codierung im Code auf DE-DE ändern statt z.B. EN-US:
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("DE-DE");  

An besten ist es aber überhaupt Umlaute zu vermeinden!

Grüße!
Mayho
SarekHL
SarekHL 06.03.2023 um 11:12:25 Uhr
Goto Top
Zitat von @colinardo:

das Problem ist häufig das schlecht programmierte Kommandozeilenprogramme gerne mal die aktive Codepage der Konsole verändern oder sie missachten und sie nicht wieder zurücksetzen, platziere also mal testweise das chcp zusätzlich nach dem ersten Befehl
chcp 1252
"C:\Program Files\freac\freaccmd.exe" -d "D:\" "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav"  
chcp 1252
del "C:\Users\User\AppData\Local\temp\änderungen temp\*.wav" /Q  

Das war's!!!

Danke!
SalihMesserschmidt
SalihMesserschmidt 12.03.2023 um 10:15:55 Uhr
Goto Top
Ich mache das immer bei Umlautsprobleme drüber=
Schreibe die Umlaute halt anders.

echo off
chcp 1252>nul
set ue=ü
set ae=ä
set oe=ö
set Uue=Ü
set Aae=Ä
set Ooe=Ö
set ss=ß
chcp 850>nul
HIER DEINE BEFEHLSKETTE ALS BEISPIEL echo Sch%oe%n, dass Herr M%ue%ller das %UUe%bungsbeispiel ist
pause
Bisher hat mir das immer geholfen.