bat 批处理技巧:执行命令输出到变量及重定向到多个文件
使用批处理很多时候会遇到需要执行其他程序,并将结果临时保存,再做处理的情况,比如还需要输出到多个地方。
比较笨的办法就是多次执行命令,再分别重定向输出。例如:
systeminfo | findstr "KB"> 1.txt
systeminfo | findstr "KB"> 2.log
systeminfo | findstr "KB"> 3.somefile
假设执行的程序性能消耗高或者比较慢,则是一个比较痛苦的过程。
将输出临时保存到变量,是不错的办法。在bat的编写语法下,使用循环将命令的输出赋值给变量
for /f "delims=" %%a in (待执行的命令) do (循环体内的操作)
注意:
- delims指定的是分割符,不写的话就默认为空格,这里指定不分割,就保留了全部输出
- 命令执行后控制台输出的结果赋值给了此处的%%a变量。
- 这里变量的赋值是一行一行的,并不是整个输出全部赋值。因此如果控制台输出有多行,接下来需要在循环体内对这个变量进行后续的操作
- 循环可以嵌套,上一层的%%a可以代入到下一层的循环引用。
输出到文件时,重定向符号>
对于文件是覆盖写操作,如果要追加写,使用两个箭头>>
。所以上面的例子完整写法是:
for /f "delims= " %%a in ('systeminfo ^| findstr "KB"') do (
echo %%a >> 1.txt
echo %%a >> 2.log
echo %%a >> 3.somefile
)
注意:bat文件里转义符号是
^
,不是正则表达式里的斜杠\
这样实际执行外部程序(这里是systeminfo)只有一次,临时保存到变量之后在输出到3个不同的文件。