CHCP und DIR in einer Zeile?

OP (Firma: Q3) #7487378
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.

OP (Firma: Q3) #7487797
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)

#7487815
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

#7487869
Lesenswert?

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

1
Starten Sie ...\windows\regedit.exe bzw. ...\winnt\regedt32.exe.
2
Klicken Sie sich durch folgende Schlüssel (Ordner) hindurch:
3
HKEY_CURRENT_USER
4
Software
5
Microsoft
6
Command Processor
7
Doppelklicken Sie auf den Schlüssel "AutoRun".
8
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.
9
Als Zeichenfolge geben Sie den/die Befehl(e) ein, die beim Start der Eingabeaufforderung ausgeführt werden sollen. Z.B.: "DIR %windir%"
10
Die Änderungen werden ggf. erst nach einem Neustart aktiv.
OP (Firma: Q3) #7488085
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 ...

OP (Firma: Q3) #7488162
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.

#7489865
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren