cmd命令的重定向输出 2>&1详解
关于cmd命令的重定向输出2>&1
mycommand>mylog.txt2>&1应该是最经典的用法了。
命令的结果可以通过“%>”的形式来定向输出,%表示文件描述符:
1为标准输出stdout、2为标准错误stderr。
系统默认%值是1,也就是“1>”,而1>可以简写为>,也就是默认为>。stdout的默认目标是终端,stderr的默认目标为也是终端。我们在批处理中执行:echotext>result.txt,我们就可以在屏幕上会看到echotext1>result.txt,即是这个道理。
其中&需要直接与重定向符号结合使用。
应用实例:
1、将结果输出到result.txt
netstopmyservices>>result2>&1
2、隐藏程序输出结果
netstopmyservices>nul2>nul
微软关于重定向的文章:使用命令重定向操作符
可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到其他位置。输入或输出数据流的位置称为句柄。
下表将列出可用的句柄。
句柄句柄的数字代号描述
STDIN0
键盘输入
STDOUT1
输出到命令提示符窗口
STDERR2
错误输出到命令提示符窗口
UNDEFINED3-9
句柄由应用程序单独定义,它们是各个工具特有的
数字0到9代表前10个句柄。可以使用命令Cmd.exe运行程序,并对该程序前10个句柄中的任何一个句柄进行重定向。要指定要用的句柄,请在重定向操作符之前键入该句柄的数字。如果未定义句柄,则默认的<重定向输入操作符是0,而默认的>重定向输出操作符是1。键入<或>操作符之后,必须指定数据的读写位置。可以指定文件名或其他现有的句柄。
要指定重定向到现有句柄,请使用与(&)字符,后面接要重定向的句柄号(即&句柄号)。
例如,下面的命令可以将句柄2(即STDERR)重定向到句柄1(即STDOUT):
2>&1
下表列出了可用于重定向输入和输出数据流的操作符。
重定向操作符描述
>将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。
<从文件而不是从键盘或句柄读入命令输入。
>>将命令输出添加到文件末尾而不删除文件中已有的信息。
>&将一个句柄的输出写入到另一个句柄的输入中。
<&从一个句柄读取输入并将其写入到另一个句柄输出中。
|从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。
默认情况下,可以从键盘将命令输入(即STDIN句柄)发送到Cmd.exe,然后由Cmd.exe将命令输出(即STDOUT句柄)发送到命令提示符窗口。
重定向输入(<)
要通过键盘将输入重定向到文件或设备,请使用<操作符。例如,要从File.txt获取sort命令的输入,请键入:
sort
File.txt的内容将以字母顺序列表的方式显示在命令提示符窗口中。
<操作符可以打开具有只读访问权限的指定文件名。因此,不能在使用该操作符时向文件中写入信息。例如,如果以<&2启动程序,则所有试图读取句柄0的操作都将失败,因为句柄2最初是以只写访问方式打开的。
注意
0是<重定向输入操作符的默认句柄。
重定向输出(>)
几乎所有的命令都将输出发送到命令提示符窗口。即使将输出发送到驱动器或打印机的命令也会在命令提示符窗口显示消息和提示。
要将输出从命令提示符窗口重定向到文件或设备,请使用>操作符。可以在许多命令中使用该操作符。例如,要将dir输出重定向到Dirlist.txt,请键入:
dir>dirlist.txt
如果Dirlist.txt不存在,Cmd.exe将创建该文件。如果Dirlist.txt存在,Cmd.exe将使用dir命令的输出替换文件中的信息。
要运行netshroutingdump命令,然后将输出发送到Route.cfg,请键入:
netshroutingdump>c:\route.cfg
>操作符可以打开具有只写访问权限的指定文件。因此,不能使用该操作符读取文件。例如,如果使用重定向操作符>&0启动程序,则写入句柄1的所有尝试操作都将失败,因为句柄0最初是以只读访问方式打开的。
注意
1是>重定向输出操作符的默认句柄。
复制句柄
重定向操作符&可以将输出或输入从一个指定句柄复制到另一个指定的句柄。例如,要将dir输出发送到File.txt并将错误输出发送到File.txt,请键入:
dir>c:\file.txt2>&1
复制句柄时,可以复制该句柄原状态的所有特性。例如,如果一个句柄具有只读访问的属性,则该句柄的所有副本都具有只读访问属性。不能将一个具有只读访问属性的句柄复制到另一个具有只写访问属性的句柄。
使用&操作符重定向输入和副本
要将重定向输入操作符(<)与复制操作符(&)结合使用,指定的文件必须已经存在。如果输入文件存在,Cmd.exe将以只读方式打开该文件,然后将文件包含的字符作为输入发送到此命令(如同从键盘输入一样)。如果指定了句柄,Cmd.exe将指定的句柄复制到系统现有的句柄中。
例如,要以句柄0输入读取(即STDIN)的方式打开File.txt,请键入:
要打开File.txt,并在内容排序后将输出发送到命令提示符窗口(即STDOUT),请键入:
sort
要查找File.txt,然后将句柄1(即STDOUT)和句柄2(即STDERR)重定向到Search.txt,请键入:
findfilefile.txt>search.txt2<&1
要以句柄0输入读取(即STDIN)的方式复制用户定义的句柄3,请键入:
<&3
使用&操作符重定向输出和复制
如果将输出重定向到文件且指定了现有的文件名,Cmd.exe将以只写方式打开文件并覆盖该文件内容。如果指定了句柄,Cmd.exe将文件复制到现有句柄中。
要将用户定义的句柄3复制到句柄1,请键入:
>&3
要将包括句柄2(即STDERR)的所有输出从ipconfig命令重定向到句柄1(即STDOUT),然后将输出重定向到Output.log,请键入:
ipconfig.exe>>output.log2>&1
使用>>重定向操作符附加输出
要从命令中将输出添加到文件末尾而不丢失文件中已存在的任何信息,请使用两个连续的大于号(即>>)。例如,使用下列命令可以将dir命令生成的目录列表附加到Dirlist.txt文件:
dir>>dirlist.txt
要将netstat命令的输出附加到Tcpinfo.txt的末尾,请键入:
netstat>>tcpinfo.txt
使用管道操作符(|)
管道操作符(|)可以提取一个命令的输出(默认情况下是STDOUT),然后将其定向到另一个命令的输入(默认情况下是STDIN)中。例如,使用下面的命令可以对目录进行分类:
dir|sort
在本例中,将同时启动两个命令,但随后sort命令会暂停,直到它接收到dir命令的输出为止。sort命令使用dir命令的输出作为输入,然后将输出发送到句柄1(即STDOUT)。
合并带重定向操作符的命令
通过合并带有其他命令和文件名的筛选器命令,可以创建自定义命令。例如,可以使用以下命令存储包含“LOG”字符串的文件名:
dir/b|find"log"loglist.txt
dir命令的输出是通过find筛选器命令进行发送的。包含字符串“LOG”的文件名作为文件名列表(例如,NetshConfig.log、Logdat.svd和Mylog.bat)存储在文件Loglist.txt中。
要在相同命令中使用多个筛选器,请使用管道(|)分隔筛选器。例如,下面的命令将搜索C盘上的每个目录以查找包含“LOG”字符串的文件名,并且在命令提示符窗口中每次显示一屏:
dirc:\/s/b|find"log"|more
利用管道(|)可以对Cmd.exe进行定向,使其通过find筛选器命令发送dir命令输出。find命令只选择包含字符串“LOG”的文件名。more命令可以显示find命令选择的文件名(在命令提示符窗口中每次显示一屏)。
到此这篇关于cmd命令的重定向输出2>&1详解的文章就介绍到这了,更多相关cmd重定向输出内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!