Forum: PC-Programmierung CHCP und DIR in einer Zeile?


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Aus einer Windows-Anwendung heraus wird ein CMD-Kommando "DIR > dir.txt" 
mit Umleitung in eine Datei direkt ausgeführt, ohne dies vorher in ein 
Batch-File zu schreiben.

Weil dabei Umlaute in Dateinamen "zerschossen" (ANSI/ASCII-Problem) 
werden, soll noch das Kommando CHCP (mit passender Codepage) 
vorangestellt werden, aber auch mögl. wieder, ohne extra eine 
Batch-Datei zu schreiben ...

Lange Frage, kurzer Sinn: Gibt es eine Möglichkeit, CHCP und DIR in 
einer Zeile aufzurufen? Wenn ja, wie sieht bitte die Syntax dazu aus?

Google findet immer nur Lösungen mit Batch-Datei. Danke.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Versuch mal
1
chcp 1252 | dir > dir.txt

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?


von Harald K. (kirnbichler)


Lesenswert?

& ist vermutlich sauberer als |.

Hier funktioniert's, da sich dir nicht für das interessiert, was ihm mit 
| 'reingeschoben wird.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Danke für die Mühe derer, die geantwortet haben, leider umsonst.

Mit Pipe "|" gibts eine Fehlermeldung von wegen "falscher Prameter" und 
mit "&" gibts zwar keine Fehlermeldung, aber es "wirkt" auch nicht. 
Schade ...

Wenn ich beide Kommandos in einer Shell nacheinander eingebe, dann 
klappt es (mit "&"). Aber in einem programm-internen Shell-Aufruf (ohne 
extra Batch-Datei) leider nicht :-(

(Windows Server 2012R2)

von Andreas (andreas6)


Lesenswert?

1
chcp 1252&cmd /cdir > test.txt
2
Aktive Codepage: 1252.

Getestet unter XP.

MfG. Andreas

von Harald K. (kirnbichler)


Lesenswert?

Frank E. schrieb:
> Mit Pipe "|" gibts eine Fehlermeldung von wegen "falscher Prameter"

Leerzeichen beachtet?

Zwischen der 1252 und | muss ein Leerzeichen stehen.

Nachtrag: Es kann natürlich sein, daß das ganze nicht an cmd.exe 
übergeben wird, sondern direkt via CreateProcess ausgeführt wird.

Du kannst auch das hier ausprobieren:

[pre]
cmd /c "chcp 1252 & dir > dir.txt"
[/c]

Auch hier: Leerzeichen beachten

: Bearbeitet durch User
von Rüdiger B. (rbruns)


Lesenswert?

Autorun im cmd:
https://www.windowspage.de/tipps/022472.html



    Starten Sie ...\windows\regedit.exe bzw. ...\winnt\regedt32.exe.
    Klicken Sie sich durch folgende Schlüssel (Ordner) hindurch:
    HKEY_CURRENT_USER
    Software
    Microsoft
    Command Processor
    Doppelklicken Sie auf den Schlüssel "AutoRun".
    Falls dieser Schlüssel noch nicht existiert, dann müssen Sie ihn 
erstellen. Dazu klicken Sie mit der rechten Maustaste in das rechte 
Fenster. Im Kontextmenü wählen Sie "Neu" > "Wert der erweiterbaren 
Zeichenfolge" (REG_EXPAND_SZ). Als Schlüsselnamen geben Sie "AutoRun" 
ein.
    Als Zeichenfolge geben Sie den/die Befehl(e) ein, die beim Start der 
Eingabeaufforderung ausgeführt werden sollen. Z.B.: "DIR %windir%"
    Die Änderungen werden ggf. erst nach einem Neustart aktiv.

von Harald K. (kirnbichler)


Lesenswert?

Rüdiger B. schrieb:
> Autorun im cmd:
> https://www.windowspage.de/tipps/022472.html

Das ist ganz sicher nicht die gesuchte Lösung, sondern sogar ziemlich 
unbrauchbar.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Wenn man CMD öffnet und nacheinander

CHCP 1250
DIR > DIR.TXT

eingibt, dann wird zuerst die Codepage der Shell geändert und danach in 
der gleichen Shell das DIR-Kommando ausgeführt. DAS funktioniert 
selbstverständlich.

Anscheinend ist es doch etwas Anderes, wenn man ein Shell-Kommando aus 
einer Windows-Anwendung heraus mit den beiden Befehlen mit "&", wie 
weiter oben beschrieben, ausführt.

Habs mehrfach probiert. Muss wohl dann doch den Weg über ein Batch-File 
gehen, den Pfad für DIR dann eben als Paramter übergeben ...

von Harald K. (kirnbichler)


Lesenswert?

Frank E. schrieb:
> Anscheinend ist es doch etwas Anderes, wenn man ein Shell-Kommando aus
> einer Windows-Anwendung heraus mit den beiden Befehlen mit "&", wie
> weiter oben beschrieben, ausführt.

Hast Du denn auch
1
cmd /c "chcp 1252 & dir > dir.txt"

ausprobiert?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Harald K. schrieb:

> Hast Du denn auchcmd /c "chcp 1252 & dir > dir.txt"
> ausprobiert?

Es funktioniert, wenn man es in CMD eingibt, leider nicht in einem 
Aufruf.

Hier ist mein Xojo-Code:
1
var s as new shell
2
s.execute "cmd /c " + chr(35) + "chcp 1252 & dir > dir.txt" + chr(35)
3
msgbox s.result

Die MsgBox zeigt "Codepage is now 1250", sonst nichts. Das nachfolgende 
DIR-Kommando schreibt dann aber aber trotzdem Exponenten und TM-Symbole 
anstatt der Umlaute in die Datei.

Ich habe in dem Testordner Dateien nach folgendem Muster: test_Ä.txt, 
test_Ö.txt usw.
Um mir jetzt erstmal Stress mit einem langen Pfad zu ersparen, starte 
ich die compilierte Testapp aus dem Ordner mit den Testdateien.

: Bearbeitet durch User
von Rüdiger B. (rbruns)


Lesenswert?

Es gibt Zeichen die mit einem Escape character übergeben werden müssen. 
Hängt von der Progrmmiersprache etc. ab.

von Flunder (flunder)


Lesenswert?

Also nach dem Befehl
1
chcp 1252
kommt die Ausgabe
1
Codepage is now 1250
? Das ist schonmal sehr seltsam. Die Andere Frage ist, welche Codepage 
brauchst Du denn ? 1252 auch ANSI genannt oder gleich UTF-8 ? Das wäre 
65001.
Erzeuge doch mal 3 Dateien : ganz ohne chcp, mit chcp 1252 und mit chcp 
65001.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.