bodo08
Goto Top

Batchscript verhält sich seltsam (Ausgabe nicht korrekt)

Hallo.

1. Ich habe u.a. das Problem, dass ein von mir betreuter PC in einem DOS-Batchscript bei dem Abarbeiten des Befehls "pause" KEINE Ausgabe liefert, aber die Pause-Funktion trotzdem gegeben ist. (Es erscheint KEIN "Drücken Sie eine beliebige Taste . . .")
Es ist weder eine Umleitung nach NUL eingebaut noch sonst irgendetwas speziell eingestellt.

2. Zusätzlich ist mir aufgefallen, dass an diesem PC das Script abbricht, sobald ich Umlaute im Text drin habe.
Das sollte eigentlich kein Problem sein, da ich zu Beginn chcp auf 65001 setze.

3. Weiterhin werden Escapesequenzen (zur farbigen Ausgabe) nicht interpretiert, sondern statt der Escapesequenz die Ausgabe "Pfeil nach links"+"die Ziffern, die als Farbe ausgegeben werden sollen" angezeigt.

Ist meine Batch-Datei falsch codiert? Dann dürfte es aber auf den anderen zig PCs (über 250St.) auch nicht funktionieren.
Auf den anderen PCs funktioniert das Script einwandfrei und völlig unauffällig! (Mit Umlauten und Farben und ohne Abbruch!)

System ist überall Win10 64bit, Systemsprache deutsch.

Hat hier jemand ne Idee???

Gruß, Bodo08.

Content-ID: 72210956659

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

Ausgedruckt am: 21.11.2024 um 13:11 Uhr

ThePinky777
ThePinky777 14.02.2024 aktualisiert um 15:17:51 Uhr
Goto Top
Versuch mal Farbcode wegzulassen, vielleicht ist ja schwarz auf schwarz face-smile warum auch immer face-smile

Farbcode mach ich immer so:

@echo on & Color 4f

Ist Rot/Weiss


0 = Schwarz 8 = Grau
1 = Blau 9 = Hellblau
2 = Grün A = Hellgrün
3 = Türkis B = Helltürkis
4 = Rot C = Hellrot
5 = Lila D = Helllila
6 = Gelb E = Hellgelb
7 = Hellgrau F = Weiß
Bodo08
Bodo08 14.02.2024 um 15:29:12 Uhr
Goto Top
Sorry, du verstehst mich falsch.
Die Farben sind gar nicht mein Problem. Die kriege ich schon richtig hin.

Ich habe das Problem NUR AUF DIESEM EINEN PC.
Das Script funktioniert korrekt auf den anderen ca. 250+ PCs.

Mein Problem ist, dass das Script NUR AUF DIESEM EINEN PC nicht korrekt läuft.
- "Pause"-Befehl zeigt kein "Drücken Sie eine beliebige Taste . . ."
- Umlaute im Code (z.B. "echo Das ist die Lösung.") brechen das Script ab
- Escapesequenzen werden nicht ausgewertet sondern zeigen in der Ausgabe nur "Pfeil nach links"+"die Ziffern, die als Farbe ausgegeben werden sollen" an.

Meine Frage ist, warum ist das so und wie behebe ich das?
TK1987
TK1987 14.02.2024 um 15:48:17 Uhr
Goto Top
Moin,

Zitat von @Bodo08:
1. Ich habe u.a. das Problem, dass ein von mir betreuter PC in einem DOS-Batchscript bei dem Abarbeiten des Befehls "pause" KEINE Ausgabe liefert, aber die Pause-Funktion trotzdem gegeben ist. (Es erscheint KEIN "Drücken Sie eine beliebige Taste . . .")
hast du schon überprüft, ob auf dem entsprechenden Rechner vielleicht Programme oder Skripte vorhanden sind, welche die genutzten Befehle überlagern? Etwa eine Pause.exe bzw. .cmd, .bat, .vbs, ...

Prüfe mal, ob der Befehl was ausspuckt:
where pause

Gruß Thomas
Bodo08
Bodo08 14.02.2024 um 16:28:36 Uhr
Goto Top
Hallo Thomas.

Nope, keine "pause.*"-Datei vorhanden.

Dein "where" liefert:
INFORMATION: Es konnten keine Dateien mit dem angegebenen
Muster gefunden werden.

Den "where"-Befehl kannte ich auch noch nicht. ;)

Und wie bereits geschrieben, die Pause-Funktion besteht ja (Pause wird ausgeführt), es wird nur kein "Drücken Sie eine beliebige Taste . . ." angezeigt.


Und bei der Ausgabe von "echo äöü" gibt es auch keinen Befehl, der hier dazwischen grätscht.
..."echo aou" geht problemlos.

Gruß, Bodo08.
TK1987
TK1987 14.02.2024 um 16:44:38 Uhr
Goto Top
Zitat von @Bodo08:
Und wie bereits geschrieben, die Pause-Funktion besteht ja (Pause wird ausgeführt), es wird nur kein "Drücken Sie eine beliebige Taste . . ." angezeigt.
Schon klar, aber ein anderes Programm oder Skript hätte ja ebenfalls eine Pause ohne Ausgabe erzeugen können, somit war das damit immer noch nicht ausgeschlossen.

Und bei der Ausgabe von "echo äöü" gibt es auch keinen Befehl, der hier dazwischen grätscht.
Hast du das Skript denn mal aus der Konsole heraus gestartet? Wenn das Skript bei einem Umlaut abbricht, gibt es doch bestimmt eine Fehlermeldung...
Bodo08
Bodo08 14.02.2024 um 17:25:52 Uhr
Goto Top
Das mit der Konsole ist ein sehr guter Tipp.
Da hätte ich auch drauf kommen können. :D
Habe ich bisher nicht probiert und könnte aufschlussreich sein.
Manchmal sieht man einfach den Wald vor lauter Bäume nicht.

Muss schauen, wie ich die Tage mal direkt an die Konsole komme, da ich jetzt den Rest der Woche HomeOffice habe und ich dazu vor Ort gehen müsste.

Ich melde mich, sobald ich neue Erkenntnisse habe.

Erst mal danke soweit.
rubberman
Lösung rubberman 15.02.2024 aktualisiert um 18:32:38 Uhr
Goto Top
Hallo,

Eindeutiges Indiz dafür, dass auf diesem PC die Legacy Konsole verwendet wird, ist die fehlende Unterstützung von VT Escape Sequenzen.
Rechtsklick auf die Titelleiste -> Standardwerte -> Tab "Optionen" -> Haken dafür rausnehmen.

CHCP 65001 hilft nur dann für das richtige Parsen des Scriptcodes, wenn das Script selbst UTF-8 codiert und ohne BOM gespeichert ist.
Und wenn du ggf. sowieso mit einem HEX Editor reinschaust, auch checken, ob Zeilenumbrüche im Windowsformat (0D 0A) und nicht im Unixformat (nur 0A) gesetzt sind.

Gibt es in der Registry unter "HKCU\Console" einen Unterschlüssel der wie der Pfad deiner Scriptdatei aussieht? Falls ja, löschen.

"HKCU\Software\Microsoft\Command Processor" bzw. "HKLM\Software\Microsoft\Command Processor" könnte einen "AutoRun" Wert enthalten, der automatisch ausgeführt wird, wenn die CMD gestartet wird. Gibt es so was und was steht drin?

In denselben Registry Schlüsseln könntest du "DelayedExpansion" mit Wert 1 finden. Falls ja, auf 0 setzen oder löschen. (Nicht mit "EnableExtensions" verwechseln!)

Prüfen ob in Pfaden der "%PATH%" Variable, die ggf. noch vor "C:\Windows\System32" stehen, ausführbare Dateien enthalten sind, die genauso heißen wie die Kommandozeilentools die du üblicherweise in einem Batchscript verwendest. Umsortieren der Pfade, sodass das System32 Verzeichnis als erstes in der Auflistung erscheint, ist nie eine schlechte Idee. (SystemPropertiesAdvanced.exe ausführen -> Tab "Erweitert" -> Umgebungsvariablen -> Systemvariablen -> Path anklicken -> Bearbeiten... -> "C:\Windows\System32" markieren -> so lange "Nach oben" bis es oben ist)

Grüße
Steffen
Bodo08
Lösung Bodo08 27.02.2024 aktualisiert um 08:12:40 Uhr
Goto Top
Hi rubberman/Steffen.

Gleich dein erster Absatz hat mein Problem gelöst.
--> Es war die Legacy Konsole.

Ich habe die Eingabeaufforderung wieder auf normal (ohne Legacy Support) gestellt und alles läuft wieder problemlos.
Dank deiner guten Beschreibung musste ich auch nicht lange suchen. Vielen Dank dafür.
Bisher kannte ich diesen Modus gar nicht, hab mich aber gleich mal schlau gemacht und weiß jetzt wieder etwas mehr. ;)
Mich würde zwar prinzipiell mal interessieren, warum das auf diesem PC so eingestellt war, aber das ist ein anderes Thema.

Und wieder was gelernt. Manches von deinen Infos wusste ich auch noch nicht.

Ich sehe schon, dass ich noch nen Haufen lernen kann, was Windows-Batch angeht. :D

Vielen Dank nochmal für die Infos.


Noch ne Zusatzinfo:
Das Verhalten trat im Script erst auf, nachdem der Befehl zum ändern der Codepage auf UTF-8
chcp 65001
ausgeführt wurde.

Auf der Microsoft-Seite unter Legacy-Konsolenmodus findet sich auch folgende Info dazu:
Der Legacy-Host verfügt über eine äußerst rudimentäre und häufig fehlerhafte Unterstützung von UTF-8 mit Codepage 65001.
Das hat den Fehler über die Legacy-Konsole noch bestätigt.

Gruß, Bodo08.
rubberman
rubberman 27.02.2024 um 19:14:01 Uhr
Goto Top
Freut mich wenn es für dich hilfreich war face-smile

Grüße
Steffen