cmd-line: Was für ein Zeichensatz ist das? (Umlaute)

WulfmanGER

Commander
Registriert
Juli 2005
Beiträge
2.317
Hallo miteinander,

ich hab mir ein kleines Script gebastelt welches bestimmte Dateien und LEERE Verzeichnisse löscht. Das Script klappt ganz gut. Auch mit den üblichen Umlauten: ÄÖÜäöüß (warum auch nicht ...)

Jetzt hab ich aber komischerweise paar Ordner und Dateien wo eben diese Umlaute (aber in einem mir unbekannten Zeichensatz) drin sind aber mein Script löscht diese nicht.

Mittels DIR @ cmd-line sehe ich auch den Fehler: Hier hab ich z.b. einen Ordner (nicht per Script löschbar): /Wu[]ste/ .... im Windows-Explorer heißt der Ordner /Wüste/ ... Wenn ich im Windows-Explorer jetzt auf Umbenennen gehe und den Cursor VOR das "s" setze und nun das "ü" löschen möchte, wird aus dem "ü" erstmal ein "u" und erst dann wird es gelöscht.

Scheint also das hier aus 2 Zeichen, ein Zeichen gemacht wird. Windows an sich hat damit kein Problem, die cmd-line aber.

Natürlich hab ich die Codepage in der cmd-line schon versucht zu ändern:
chcp 1252
chcp 850
chcp 852
chcp 28591
Hilft alles nichts.

Was sind das für Sonderzeichen und wie bekomme ich die in der cmd-line gelöscht?

Danke
 
Hilft jetzt nicht beim Problem, aber genau deswegen benennt man Dateien und Ordner immer ohne Umlaute :D

Also ich mache es zumindest nie anders, immer schön mit ae, oe, ue, und auch kein ß ^^
 
Leider hab ich die Verzeichnisse/Dateien nicht erstellt ;) sonst wüsste ich zumindest wo die Fehlerquelle zu verorten ist ;)
 
Das liegt wahrscheinlich an der Kodierung. Batchdateien sind doch in der Regel in ANSI.
Ist das Batchscript auf UTF-8 eingestellt, dann entstehen bei den Umlauten solche Sonderzeichen.

Ich würde das Script mal mit z.B. notepad++ öffnen und nachschauen, ob die Kodierung auf ANSI gestellt ist.
Steht sie auf UTF-8, muss man nach dem Konvertieren ins ANSI alle Sonderzeichen von Hand in die richtigen Umlaute ändern.
(29.Oktober.2018)0.JPEG
(29.Oktober.2018)1.JPEG
 
Zuletzt bearbeitet von einem Moderator:
solche Zeichnen nennt man "kombinierende diakritische Zeichen", das ist ganz normaler Unicode, mit ANSI oder Codepages hat das nix zu tun:

https://de.wikipedia.org/wiki/Unicodeblock_Kombinierende_diakritische_Zeichen

Warum sie allerdings in den Ordnernamen verwendet werden kann ich dir nicht sagen.
Über Unicode-Normalisierung kann man solche kombinierten Zeichen in ihre Einzelzeichen-Pendante konvertieren, das dürfte aber wohl über das hinausgehen, was man mit einem reinen Batch-Skript tun kann...
 
  • Gefällt mir
Reaktionen: WulfmanGER
das Problem tritt ja auch direkt auf der cmd-line auf ... hat mit dem Batch also nichts zu tun.

Ich gebe auf der cmd-line "dir" ein -> "/Wu[]ste/" ...

In der Batch steht zum löschen der LEEREN Verzeichnisse:
Code:
for /f "delims=?" %%i in ('dir /AD /b /s "%cd%"') do rd "%%i"

Auf der cmd-line muss ich aus den %%i ein %i machen - dann klappt der Befehl auch dort

Code:
for /f "delims=?" %i in ('dir /AD /b /s "%cd%"') do rd "%i"

Ergebnis ... interessant die Ausgabe:
rd "e:\blabla\blabla\Wu[:]ste"
Das System kann die angegebene Datei nicht finden
[:] <- ich hab hier die Umlautpunkte um 90° gedreht stehen; u: (: = 90° gedreht - bekomme ich hier nicht angezeigt - und screenshoten geht nicht - falscher PC gerade)

Der Befehl klappt sonst Anstandslos bei Verzeichnissen mit Umlauten ... nur da bestehen die Umlaute dann aus EINEM Zeichen und nicht wie hier aus zweien mit separaten Umlautpunkten.


BrainFart schrieb:
[...] "kombinierende diakritische Zeichen",
[...]
Über Unicode-Normalisierung kann man solche kombinierten Zeichen in ihre Einzelzeichen-Pendante konvertieren, das dürfte aber wohl über das hinausgehen, was man mit einem reinen Batch-Skript tun kann...

Mhhh klingt nicht gut - auch wenn das zumindest die Erklärung ist. Ok ist jetzt nicht so das ich da 1000er Verzeichnisse habe - bisher hab ich die Verzeichnisse eh manuell gelöscht - gescriptet nimmt halt Arbeit ab ;)
 
Zuletzt bearbeitet:
Falls du mit Javascript vertraut bist (oder Lust hast, dich damit zu beschäftigen :) ) gibt es mit unorm eine Bibliothek, die Unicode (De-)Normalisieren kann:

https://www.npmjs.com/package/unorm

mit Node.js kannst du auch Skripte schreiben, die Dateisystem-Operationen durchführen dürfen.
 
solche Zeichnen nennt man "kombinierende diakritische Zeichen", das ist ganz normaler Unicode, mit ANSI oder Codepages hat das nix zu tun:
Und ob es das hat.
Wenn MS es nämlich richtig gemacht hätte hätten wir Europa-Würstchen mit unseren Sonderzeichen ä å ÿ ø æ ü ë ß nicht dauernd solchen Ärger.

CN8
 
  • Gefällt mir
Reaktionen: Micha45
Zurück
Oben