Windows 命令列

Windows 命令列

我有一個 exe,它會產生帶有某些參數的輸出,並且我希望從該輸出中將整數部分儲存在以下文件中:

C:\MyExe -param給出一個 o/p 123abc,所以123應該儲存在一個檔案中。我們如何透過Windows命令列來實現這一點呢?

答案1

這不像 dbenham 的答案那麼優雅,但它是純粹的 Windows。如果您的程式的輸出始終與您的範例類似(一系列數字,後面跟著一個小寫字母,然後是其他內容),那麼這將起作用:

for /f "delims=abcdefghijklmnopqrstuvwxyz" %x in ('C:\MyExe -param') do echo %x > out.txt

筆記:

  • 如果最後一位數字後面可能跟著小寫字母以外的字元(甚至是空格),請在delims=字串中包含所有可能的分隔符號。
  • 如果在互動式命令提示字元中輸入上述命令,則上述命令將起作用。要在批次檔(即命令提示字元腳本)中使用它,請變更%x%%x(兩次出現)。
  • 上述命令將對包含至少一個分隔符號的echo %x > out.txt每一行輸出執行一次子命令。C:\MyExe -param如果你的程式只寫這一行,沒問題。如果您的程式寫入多行這樣的行,例如,

    5gold rings
    4calling birds
    3french hens
    2turtle doves
    1partridge
    

    它每次都會覆蓋該文件,並且您最終只會得到最後一個值。如果要捕獲所有數字,請添加括號,如下所示:

    (for /f "delims=abc…xyz" %x in ('C:\MyExe -param') do echo %x) > MyOutputFile.txt
    ↑                                                            ↑
    

    因此整個命令(向上到echo %x)將被視為單一命令,並且重定向 ( >) 只會發生一次。或者,只需將 更改為>>>輸出就會累積(而且,文件中之前的任何內容仍然會存在,並附加新的輸出)。

答案2

這對於純批處理來說並不是微不足道的,但如果您使用REPL.BAT - 混合 JScript/批次實用程式在標準輸入上執行正規表示式搜尋/取代並將結果寫入標準輸出。它是純腳本,可以在 XP 及以上版本的任何現代 Windows 電腦上運行。

c:\myExe -param | repl "(\d*).*" $1 >out.txt

相關內容