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
Oder auch:
1 | chcp 1252 & dir > dir.txt |
https://de.m.wikibooks.org/wiki/Batch-Programmierung:_Batch-Operatoren
& ist vermutlich sauberer als |. Hier funktioniert's, da sich dir nicht für das interessiert, was ihm mit | 'reingeschoben wird.
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)
1 | chcp 1252&cmd /cdir > test.txt |
2 | Aktive Codepage: 1252. |
Getestet unter XP. MfG. Andreas
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
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.
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.
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 ...
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?
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
Es gibt Zeichen die mit einem Escape character übergeben werden müssen. Hängt von der Progrmmiersprache etc. ab.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.