Windows-Befehlszeile

Windows-Befehlszeile

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 -paramgibt ein o/p aus 123abc, 123sollte 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 %xin %%x(beide Vorkommen).
  • Der obige Befehl führt den echo %x > out.txtUnterbefehl einmal für jede Ausgabezeile aus, C:\MyExe -paramdie 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

verwandte Informationen