Ich habe eine EXE, die eine Ausgabe mit einigen Parametern erzeugt, und von dieser Ausgabe möchte ich, dass der ganzzahlige Teil in einer Datei wie der folgenden gespeichert wird:
C:\MyExe -param
gibt ein o/p aus 123abc
, 123
sollte also in einer Datei gespeichert werden. Wie können wir dies über die Windows-Befehlszeile erreichen?
Antwort1
Das ist nicht so elegant wie die Antwort von dbenham, aber es ist reines Windows. Wenn die Ausgabe Ihres Programms immer wie Ihr Beispiel aussieht (eine Ziffernfolge, unmittelbar gefolgt von einem Kleinbuchstaben und dann von anderen Dingen), funktioniert dies:
for /f "delims=abcdefghijklmnopqrstuvwxyz" %x in ('C:\MyExe -param') do echo %x > out.txt
Anmerkungen:
- Wenn auf die letzte Ziffer ein anderes Zeichen als ein Kleinbuchstabe (sogar ein Leerzeichen) folgen könnte, schließen Sie alle möglichen Trennzeichen in die
delims=
Zeichenfolge ein. - Der obige Befehl funktioniert, wenn er in eine interaktive Eingabeaufforderung eingegeben wird. Um ihn in einer Batchdatei (d. h. einem Eingabeaufforderungsskript) zu verwenden, ändern Sie ihn
%x
in%%x
(beide Vorkommen). Der obige Befehl führt den
echo %x > out.txt
Unterbefehl einmal für jede Ausgabezeile aus,C:\MyExe -param
die mindestens ein Trennzeichen enthält. Wenn Ihr Programm nur diese eine Zeile schreibt, ist das kein Problem. Wenn Ihr Programm mehrere solcher Zeilen schreibt, z. B.5gold rings 4calling birds 3french hens 2turtle doves 1partridge
Dadurch wird die Datei jedes Mal überschrieben und Sie erhalten am Ende nur den letzten Wert. Wenn Sie alle Zahlen erfassen möchten, fügen Sie Klammern hinzu, wie folgt:
(for /f "delims=abc…xyz" %x in ('C:\MyExe -param') do echo %x) > MyOutputFile.txt ↑ ↑
daher wird der gesamte Befehl (bis zum
echo %x
) als einzelner Befehl behandelt und die Umleitung (>
) erfolgt nur einmal. Alternativ können Sie einfach das>
in ändern>>
und die Ausgaben werden akkumuliert (aber auch alles, was vorher in der Datei war, bleibt dort, mit der angehängten neuen Ausgabe).
Antwort2
Dies ist bei reinem Batch nicht trivial, aber bei Verwendung vonREPL.BAT - ein hybrides JScript/Batch-Dienstprogrammdas eine Suche/Ersetzung mit regulären Ausdrücken auf stdin durchführt und das Ergebnis auf stdout schreibt. Es handelt sich um ein reines Skript, das auf jedem modernen Windows-Rechner ab XP läuft.
c:\myExe -param | repl "(\d*).*" $1 >out.txt