いくつかのパラメータを使用して出力を生成する 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
上記のコマンドは、少なくとも1つの区切り文字を含む出力の各行に対してサブコマンドを1回実行しますC:\MyExe -param
。プログラムがその1行だけを書き込む場合は問題ありません。プログラムがそのような行を複数書き込む場合、たとえば、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
) は単一のコマンドとして扱われ、リダイレクト (>
) は 1 回だけ発生します。 または、>
を に変更するだけ>>
で、出力が蓄積されます (ただし、以前にファイルにあったものはすべてそのまま残り、新しい出力が追加されます)。
答え2
これは純粋なバッチでは簡単ではありませんが、REPL.BAT - ハイブリッド JScript/バッチ ユーティリティstdin で正規表現の検索/置換を実行し、その結果を stdout に書き込みます。これは、XP 以降の最新の Windows マシンで実行できる純粋なスクリプトです。
c:\myExe -param | repl "(\d*).*" $1 >out.txt