我有一个 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/批处理实用程序在 stdin 上执行正则表达式搜索/替换并将结果写入 stdout。它是纯脚本,可在任何现代 Windows 机器(从 XP 开始)上运行。
c:\myExe -param | repl "(\d*).*" $1 >out.txt