Verknüpfung zu Batch - Zeichenkodierung versagt

cumulonimbus8

Fleet Admiral
Registriert
Apr. 2012
Beiträge
18.345
Hallo!

Code:
set SD=J
set TD=G
for %%a in (ANW Fonts "MP3 CD & Sticks" "MP3 CN8 Auto"  Opera Telefonbücher) do robocopy "%SD%:\%%~a" "%TD%:\%%~a" /mir /w:0 /r:3
Diese Zeilen im CMD-Fenster direkt ausgelöst (ich korrigiere; %%a muss dann natürlich nur %a lauten) funktionieren. In einer Batchdatei (daraus stammt dieser Abschnitt), einfach per Verknüpfung…
%windir%\system32\cmd.exe /k K:\FreshUp.BAT
…ausgelöst, (/k statt /c um das sehen zu können) ergibt indes einen Unfall:
Gestartet: Samstag, 26. Juli 2014 12:41:24
Quelle : J:\Telefonb├╝cher\
Ziel : G:\Telefonb├╝cher\

Offensichtlich kommt CMD auf diese Weise mit dem ü ins Schleudern (ASCII 195/C3├ und 188/BC╝) - was zwei Codes sind. RoboCopy oder simpel ECHO fü… f├╝hren zum selben Resultat, es ist also CMD. Soweit ich sehe ist es eine UTF-8 Umsetzung.

Wie überrede ich das System das in korrekte Codes umzusetzen? Unter XP war das schon Krampf im Editor Verfasstes innert CMD noch mal durch EDIT zu jagen um die Umlaute ›zu kassieren‹.
An den Verknüpfungen habe ich nichts gefunden um dran zu drehen, Schalter für CMD selbst sehe ich auch nicht.
Kanndochnichtwarstein???

CN8

PS: Auch die Telefonbücher in "" nützen nichts, und auf TELEFO~1 will ich Verzicht üben.
 
Setz mal ein
Code:
chcp 65001
an den Anfang.
 
Ansonsten die Batch-Datei mit Notepad++ öffnen und als Codepage "OEM 850" speichern (unter Encoding - Character sets - Western European).
 
@Yuuri:
Wohin; gleich an den Anfang der Bach?
Das ist jedenfalls praktischer Murks, das knallt mir sofort jede CMD-Instanz zu und ich seh' nichts mehr.


@3murmeln:
Die Datei ist PlainText, durch eine normalen PlainText-Editor (MetaPad) gejagt. Warum sollte nicht ausgerechnet und explizit PlainText korrekt funktionieren?

Naja, schaun wir mal. (Was die da so alles Mitteleuropäisch nennen…) Ich wurde gewarnt, dass sich das nicht rückgängig machen ließe - nicht weiter wild da ich an einem andere System sitze und mich mit ECHO begnüge. Statt ├╝ taucht da jetzt ein ³ [hoch-3] statt dem ü auf. Sowohl vorher wie nachher.


Wie bändigt man diesen Löwen?


CN8
 
cumulonimbus8 schrieb:
Wohin; gleich an den Anfang der Bach?
Ja.
cumulonimbus8 schrieb:
Das ist jedenfalls praktischer Murks, das knallt mir sofort jede CMD-Instanz zu und ich seh' nichts mehr.
Das heißt genau was? Ohne Output:
Code:
chcp 65001 > nul
cumulonimbus8 schrieb:
Die Datei ist PlainText, durch eine normalen PlainText-Editor (MetaPad) gejagt. Warum sollte nicht ausgerechnet und explizit PlainText korrekt funktionieren?
Nur weil da Text drin steht, besitzt er trotzdem ein Encoding. Runtergerechnet sind es alles nur Bits, es unterscheidet sich aber immer und überall, wie diese dargestellt werden und bei Text ist es nun mal Encoding. Lass dir mal ne UTF-8 Seite als ISO-8859-15 darstellen, da wirst du dich teilweise nicht mehr vor kryptischen Zeichen halten können. Grund: falsches Encoding.
 
Das heißt genau was?
Puff - Dos-Box zu, Affe tot.
Selbst eine CMD die ich geöffnet habe löst sich in Luft auf, spätestens wenn da was Kritisches ge-echot werden soll. Das sehe ich gerade so wegblitzen, an an einer 2. Gelegenheit mit diesen Umlauten die mich gerade ärgert: chcp 65001 ausgeführt, batch aufgerufen - wumm, weg ist das Fenster.

Nur weil da Text drin steht, besitzt er trotzdem ein Encoding.
Und zwar eine gottverdammte 08-15-Kodierung! Standard. Niedrigster Systemstandard. Wenn das knallt und Mist macht ist das kaum als Normalzustand anzusehen.

Jedenfalls klappt das chcp 65001 auch anderweitig nicht. Ich habe die jetzige (zweite) Batch von ECHO auf ROBOCOPY zurückgeändert (weil - ich wollte je den Output sehen). Resultat:
-------------------------------------------------------------------------------
Der Vorgang wurde erfolgreich beendet.

…für alle RoboCopy-Zeilen und zwar ratzfatz, ganz offensichtlich, ohne dass RoboCopy in Tätigkeit getreten wäre.

Da muss eine andere Lösung her.

CN8


Ach, verdammt, was vergessen was mich völlig verwirrt:
DIR /AD /X
liefert alle Directorys und deren DOS 8.3-Namen. Allerdings wurde, was mir bei XP und früher nie aufgefallen ist, aus aus «Hägar der Schreckliche» ein «HGARTH~1» (auch unter XP, Dank an die VM), auch dabei ging das Ä also verschütt.
Da muss doch was zu drehen sein. Unter XP ging es ja schließlich.
 
Zuletzt bearbeitet:
cumulonimbus8 schrieb:
Da muss doch was zu drehen sein. Unter XP ging es ja schließlich.
Ja und die Lösung steht oben.
Code:
chcp > test.log
dir /AD >> test.log
chcp 65001 > test-65001.log
dir /AD >> test-65001.log
chcp 28605 > test-28605.log
dir /AD >> test-28605.log
Code:
Aktive Codepage: 850.
H„gar der Schreckliche
„„„
”””

ááá
Code:
Aktive Codepage: 28605.
Hägar der Schreckliche
äää
ööö
üüü
ßßß
Code:
Aktive Codepage: 65001.
Hägar der Schreckliche
äää
ööö
üüü
ßßß
cumulonimbus8 schrieb:
Und zwar eine gottverdammte 08-15-Kodierung! Standard. Niedrigster Systemstandard. Wenn das knallt und Mist macht ist das kaum als Normalzustand anzusehen.
Ja und zwar eine, die 3murmeln genannt hat. chcp sagt dir, dass die aktive Codepage 850 ist (Standardeinstellung). UTF-8 entspricht nun mal Codepage 65001. Text im Windows selbst, ist übrigens UTF-16 bzw. ISO-8859-1 bzw. Latin1 bzw. Windows-1252. Ist klar, dass es dort knallt.

Also entweder du setzt das Encoding in der Konsole auf utf8 (Codepage 65001) oder ISO-8859-15/Windows 1252 (Codepage 28605) oder stellst es im Editor auf OEM 850 um.
 
Ich habe genug Ahnung was Codepages sind und tun.

Was ich nicht weiß - welche geisteskranke Systemstandards da rumfuhrwerken! Warum soll ein Progrmmcode in verschieden Editoren korrekt aussehen, mit aller Serie an Umlauten usw., warum sollte ich diese auch in CMD-Boxen eintippen können wenn die selbe Box es aber nicht peilt besagten Code ordentlich zu parsen?
Das Sind Dinge über die man sich egentlich nicht auch einen halben Gedanken machen müssen müsste! So was muss einfach flutschen.

Ich kann in DOS einen Ordner Hägar ›korrekt‹ anlegen. Ich kann aber nicht Hägar in eine Datei pipen (H„gar).
Das Ziellaufwerk ist HTFS, das Quelllaufwerk auch. Beidesmal heißt der unter XP angelegte und bediente Ordern «Hägar the Horrible». An der Quelle [von XPscher HDD unter 8 auf diese SSD kopiert] ist es HGARTH~1, am Ziel aber HÄGART~1. Mit Ä.
Und nun? Wo ist da die Logik? An Codepages kann so was ja auch nicht liegen.

Mal leicht was geändert (test.bat):
Code:
chcp > test.log
echo øæåøØÆÅ >> test.log
dir /AD >> test.log
chcp 65001 > test-65001.log
echo øæåøØÆÅ >> test-65001.log
dir /AD >> test-65001.log
chcp 28605 > test-28605.log
echo øæåøØÆÅ >> test-28605.log
dir /AD >> test-28605.log
Neue CMD-Box, neues Glück - test wird ausglöst
Code:
Aktive Codepage: 850.
øæåøØÆÅ 
 Datentr„ger in Laufwerk H: ist HOTEL
 Volumeseriennummer: E6C8-C8A0

 Verzeichnis von H:\Bitmaps

2014-07-27  13:04    <DIR>          .
2014-07-27  13:04    <DIR>          ..
2014-07-25  17:13    <DIR>          Cache
2014-07-27  11:35    <DIR>          Fotos
2014-07-01  20:07    <DIR>          H„gar the Horrible
2014-06-07  17:45    <DIR>          Lager
2014-06-07  17:45    <DIR>          Logos & Symbole
2014-07-21  13:32    <DIR>          Schachaufgaben
2014-06-07  17:46    <DIR>          SciFi
               0 Datei(en),              0 Bytes
               9 Verzeichnis(se), 12.447.969.280 Bytes frei
Code:
Aktive Codepage: 28605.
 Datenträger in Laufwerk H: ist HOTEL
 Volumeseriennummer: E6C8-C8A0

 Verzeichnis von H:\Bitmaps

2014-07-27  13:04    <DIR>          .
2014-07-27  13:04    <DIR>          ..
2014-07-25  17:13    <DIR>          Cache
2014-07-27  11:35    <DIR>          Fotos
2014-07-01  20:07    <DIR>          Hägar the Horrible
2014-06-07  17:45    <DIR>          Lager
2014-06-07  17:45    <DIR>          Logos & Symbole
2014-07-21  13:32    <DIR>          Schachaufgaben
2014-06-07  17:46    <DIR>          SciFi
               0 Datei(en),              0 Bytes
               9 Verzeichnis(se), 12.447.969.280 Bytes frei
Nanu? fehlt da nicht was? ';[":{ -- upps… øæåØÆÅ
Code:
Aktive Codepage: 65001.
Was vermisst? Sage ich ja: 1x echo und Päng, weg ist die Box.

Neuer Versuch, neue Batch:
chcp 65001
robocopy "h:\bitmaps\Hägar the Horrible" "B:\bitmaps\Hägar the Horrible" /w:0 /r:0
Päng - auch hier platzt die eigens eröffnete CMD-Box.

Also - CHCP taugt hinten und vorne nichts.
Was also tun?

CN8
 
Hast du die Batch auch als UTF-8 gespeichert? Wahrscheinlich nutzt du momentan ISO-8859-1 (ANSI o.ä. im Editor) für die Datei, die Konsole lief auf OEM 850 und jetzt UTF-8. Da passt alles nicht, ganz logisch. Also nochmal im Editor als UTF-8 speichern, dann sollte es auch mit den Umlauten im Zusammenspiel passen.
 
Ich müsste das als UTF-8 ohne BOM - sonst streikt Batch.

In NP++ ist aber das eingestellt - mit dem alten Resultat.

Und nun geht mir sogar VBS auf den Senkel - mit genau dem selben Fehlverhalten. Was mir wenigstens beim Spielen mit den Kodierungen aufgefallen ist: ist habe das in NP++ in ANSI wandeln lassen - und die Umlaute wurden zu den Zeichen die ich auch in CMD (oder hier im PopUp) bekomme. Plötzlich auch im Quelltext..! Sofort die Umlaute rein zeigt PopUp sie korrekt. Ich kapituliere.

Die selbe Fummelei am Batch-Code bewirkt scheints nichts. Dumm. Aber vielleicht ist mir da ein Konvertierschritt durchgerutscht, bei dem vielen Probieren.

(Das Wetter erzwingt eine Unterbrechung, ich halte diesen Topf aber am Kochen.)

CN8



Ich weiß auch nicht wie - plötzlich scheint das alles quer verquirlt zu laufen.
• Quellcode als UTF-8 gespeichert (k.A. was komme ich das nicht mit NP++ bearbeite…)
• nach @echo off gleich die CHCP 65001 rein
• Rest mit Umlauten wie von XP her
• CMD-Box auf TTF geändert statt Rasterschrift
…und es funktionierte nach zig Versuchen plötzlich doch.

Nein, ich kapiers nicht. Hauptsache es läuft, der Rest ist Asche…
 
Zuletzt bearbeitet:
Zurück
Oben