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/批处理实用程序在 stdin 上执行正则表达式搜索/替换并将结果写入 stdout。它是纯脚本,可​​在任何现代 Windows 机器(从 XP 开始)上运行。

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

相关内容