我有一個 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