比较笨的办法就是多次执行命令,再分别重定向输出。例如:

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个不同的文件。

重定向符号主要有:>,>>,<,>&,<&和|。 首先从一个经典问题开始,“1>nul 2>nul”的意思是既屏蔽正常的输出又屏蔽错误的输出,那么我们马上就知道了这里的1代表正常输出(即所谓的“标准输出”–stdout),2代表错误输出(即所谓的“标准错误输出”–stderr)。 1和2其实是句柄stdout和stderr的数字代号,至于什么是句柄,我认为可以理解为某种 批处理可以说是windows下的shell,虽然没有shell强大吧,但也足以用来完成很多任务了。这里记录了大部分的批处理用法,最后有一个调用yuicompressor压缩js/css的脚本。 先说使用批处理要注意的几点: 尽量不要将批处理要操作的文件放在不同的盘符下,所有要处理的文件最好放在同一个目录下; 文件/夹名最好不要空格,因为批处理的命令参数一般是用空格分隔的,有 echo off & color 0A :: 判断输入路径是不是文件夹,如果是,则获取文件夹下的所有文件名(包括子文件夹下的) :: 如果要文件名带上路径,则需要在dir这一句的%%~nxi上作改动 if exist list.txt del list.txt /q :input set input=: set ... 最近特么的遇到个问题,需要根据命令返回的信息判断这个命令是否执行成功,思路就是把所有的信息重定向到一个文件里面,然后查找某个字符串,可是因为这个命令后面有一堆的信息,重定向如果加在命令后面就只能获取最近的一条信息,完鸡巴蛋。例如:fastboot.exe writeKeys会有如下的信息:Opening COM25... write KEYS... FAILED (remote: keys exi... 重定向符号主要有:>,>>,&,第一节    首先从一个经典问题开始,“1>nul 2>nul”的意思是既屏蔽正常的输出又屏蔽错误的输出,那么我们马上就知道了这里的1代表正常输出(即所谓的“标准输出”--stdout),2代表错误输出(即所谓的“标准错误输出”--stderr)。    1和2其实是句柄stdout和stderr的数字代号,至于什么是句柄,我认为可以理解为某种事物的一种标识,或者说 关于 ping -n 1 127.1>nul: 1、ping是测试网络连接性的网络命令,参数"-n 1"表示只发送一次ICMPS数据包来测试网络的连接性。 2、127.1表示本机保留IP地址,实际就是127.0.0.1,ping 127.1就表示ping 127.0.0.1,可以测试网卡及TCP/IP协议是否正常安装及工作。 3、">nul"表示把命令产生的屏幕显示信息重定向(>)到空设备( bat批处理脚本是一门比较冷门的脚本语言,适用于windows。在实际的项目开发中,在windows系统中的开发语言不少是需要搭建很复杂的环境或编写好的程序需要编译成相应可执行文件才能使用,因此偶尔会希望有个语言不需要编译且容易获得——bat批处理脚本就是这样一门windows脚本语言。