Windows下命令重定向操作符.doc_第1页
Windows下命令重定向操作符.doc_第2页
Windows下命令重定向操作符.doc_第3页
Windows下命令重定向操作符.doc_第4页
Windows下命令重定向操作符.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows使用命令重定向操作符(Redirection Operators)可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到不同的位置。输入或输出数据流的位置即为句柄。下表列出了可用于将命令输入和输出数据流进行重定向的操作符。重定向操作符说明将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。将命令输出添加到文件末尾而不删除文件中的信息。&将一个句柄的输出写入到另一个句柄的输入中。&从一个句柄读取输入并将其写入到另一个句柄输出中。|从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe,然后由 Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。一般的命令行程序输入输出请求都通过内部定义三个“端口”(在NT下称为“句柄”,在DOS下未定义)来完成,分别为标准输入stdin、标准输出stdout、标准错误stderr。它们通常指向的设备为控制台(console,代码为CON),其中stdin指向控制台的键盘,stdout/stderr指向控制台的监视器。因此,控制台通常即指键盘与监视器的联合体,这是在早期大型机的终端机上所体现出来的概念。其中的stdin可被、重定向,而stderr在DOS下不可直接重定向,只有通过ctty或其它命令将系统控制权转交给其它设备的方式,来间接完成。下表将列出可用的句柄。句柄句柄的数字代号说明STDIN0键盘输入STDOUT1输出到命令提示符窗口STDERR2错误输出到命令提示符窗口UNDEFINED3-9这些句柄由应用程序和各个具体工具单独定义。数字 0 到 9 代表前 10 个句柄。可以使用命令 Cmd.exe 运行程序并将前 10 个句柄中的任何一个重定向到该程序。要指定想使用的句柄,可在重定向操作符前面键入该句柄的数字。如果未定义句柄,则默认的 重定向输出操作符是 1。键入 或 操作符之后,必须指定要读取或写入数据的位置。可以指定文件名或另一个现有的句柄。要指定重定向到现有句柄,请使用与 (&) 字符,后面接要重定向的句柄号(例如 &句柄#)。例如,下面的命令可以将句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):1c:file.txt 2&1复制句柄时,可以复制该句柄原状态的所有特性。例如,如果一个句柄具有只读访问的属性,则该句柄的所有副本都具有只读访问属性。不能将一个具有只读访问属性的句柄复制为另一个具有只写访问属性的句柄。重定向命令输出 ()要从键盘或设备重定向命令输出,请使用 操作符。例如,要从 File.txt 得到 sort 命令的命令输入,请键入:sortfile.txtFile.txt 的内容将以字母顺序列表的方式显示在命令提示符窗口中。 操作符可以打开具有只读访问的指定文件名。所以,不能使用该操作符向文件中写入信息。例如,如果以 &2 启动程序,则所有试图读取句柄 0 的操作都将失败,因为句柄 2 最初是以只读访问打开的。注意 0 是 的默认句柄 重定向命令输出 ()几乎所有的命令都将输出发送到命令提示符窗口。即使将输出发送到驱动器或打印机的命令也会在命令提示符窗口显示消息和提示。要将命令输出从命令提示符窗口重定向到文件或设备,请使用 操作符。可以在许多命令中使用该操作符。例如,要将 dir 输出重定向到 Dirlist.txt,请键入:dirdirlist.txt如果 Dirlist.txt 不存在,Cmd.exe 将创建该文件。如果 Dirlist.txt 存在,Cmd.exe 将使用 dir 命令的输出替换文件中的信息。要运行 netsh routing dump 命令,然后将命令输出发送到 Route.cfg,请键入:netsh routing dumpc:route.cfg 操作符可以打开具有只写访问属性的指定文件。所以,不能使用该操作符读取文件。例如,如果使用重定向 &0 启动程序,则所有试图写入句柄 1 的操作都将失败,因为句柄 0 最初是以只读访问大开的。注意 1 是 重定向输出操作符的默认句柄。 使用 & 操作符重定向输入和复制要使用重定向输入操作符 &,指定的文件必须已经存在。如果输入文件存在,Cmd.exe 将以只读方式打开该文件,然后将文件中作为输入的字符发送到此命令(如同从键盘输入一样)。如果指定了句柄,Cmd.exe 将指定的句柄复制到系统现有的句柄中。例如,要以句柄 0 输入读取(即 STDIN)的方式打开 File.txt,请键入:file.txt要打开 File.txt,并在内容分类后将输出发送到命令提示符窗口(即 STDOUT),请键入:sortsearch.txt 2&1要以句柄 0 输入读取(即 STDIN)的方式复制用户定义句柄 3,请键入:& 操作符重定向输出和复制如果将输出重定向到文件且指定了现有的文件名,Cmd.exe 将以只写方式打开文件并覆盖该文件内容。如果指定了句柄,Cmd.exe 将文件复制到现有句柄中。要将用户定义句柄 3 复制到句柄 1,请键入:&3要将包括句柄 2(即 STDERR)的所有输出从 ipconfig 命令重定向到句柄 1(即 STDOUT),然后将输出重定向到 Output.log,请键入:ipconfig.exeoutput.log 2&1使用 重定向操作符追加输出要从命令中将输出添加到文件末尾而不丢失文件中已存在的任何信息,请使用两个连续的大于号(即 )。例如,下面的命令可以将由 dir 命令生成的目录列表追加到 Dirlist.txt 文件:dirdirlist.txt要将 netstat 命令的输出追加到 Tcpinfo.txt 的末尾,请键入:netstattcpinfo.txt使用管道操作符 (|)管道操作符 (|) 可以提取一个命令的输出(默认情况下是 STDOUT),然后将其导入另一个命令的输入中(默认情况下是 STDIN)。例如,下面的命令将对目录分类:dir | sort在本例中,将同时启动两个命令,但随后 sort 命令会暂停,直到它接收到 dir 命令的输出为止。sort 命令使用 dir 命令的输出作为输入,然后将输出发送到句柄 1(即 STDOUT)。合并带重定向操作符的命令可以通过合并带有其它命令和文件名的筛选器命令创建自定义命令。例如,可以使用以下命令存储包含“LOG”字符串的文件名:dir /b | find LOG loglist.txtdir 命令的输出通过 find 筛选器命令发送。包含字符串 LOG 的文件名作为文件名列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)存储在文件 Loglist.txt 中。要在相同命令中使用多个筛选器,请使用管道 (|) 分隔筛选器。例如,下面的命令将搜索 C 盘上的每个目录以查找包含 LOG 字符串的文件名,并且在命令提示符窗口中每次显示一屏:dir c: /s /b | find LOG | more利用管道 (|) 可以将 Cmd.exe 导向为通过 find 筛选器命令发送 dir 命令输出。find 命令只选择包含字符串 LOG 的文件名。more 命令可以显示由 find 命令选择的文件名(在命令提示符窗口中每次显示一屏)。、屏蔽输出信息“设备”是指可控制PC硬件或端口的设备驱动程序或端口代码,它通常由系统底层或硬件驱动程序实现和支持。比如IO.SYS实现的控制台CON、系统时钟CLOCK$、未知设备CONFIG$、第一串口AUX、第一并口PRN、所有串口COM1COM4、所有并口LPT1LPT3、可用盘符A:-X:以及上文提到的空设备NUL。还有许多其它设备,比如HIMEM.SYS实现的XMSXXXX0,EMM386.EXE实现的EMMXXXX0,IFSHLP.SYS实现的IFS$HLP$等。在这些设备中,可以处理输入输出信息的很少,只有CON、NUL以及连接有输入输出硬件(打印机、MODEM等)的串口或并口设备。它们被称为“字符设备”,而磁盘文件也作为一种特殊的字符设备列选其中,这就大大扩充了重定向的自由度与实用性,以致很多人也将重定向称为“文件重定向”。空设备NUL是一个特殊的设备,因为它没有可控制的PC硬件或端口,而只是一个虚构的的设备或端口,它仅存在于软件层面。正因为如此,它可以接受所有重定向的输入输出请求而不给出任何回应,在NT下不会给出任何输入信息而结束输入请求,在DOS下则反复填充127个二进制字节1(显示为A)后终止响应。命令行对重定向符号出现的位置不做过多限定,只要重定向符号后紧随“字符设备”即可,故以下语句等效:echo Hanye GuxingC:Chuxuezhe.txtecho HanyeC:Chuxuezhe.txt GuxingechoC:Chuxuezhe.txt Hanye GuxingC:Chuxuezhe.txt echo Hanye Guxing在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&,|和语句块的制约限制。echo Message1 msg1.txt & echo Message2 msg2.txtif %target%= (echo message to screen ) else (echo message to file %target%)现在,我们以 del 命令为例,讲一下命令重定向操作符 的使用。C:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Documents and Settings寒夜孤星说明:正常操作。C:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星attrib +r C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Chuxuezhe.txt拒绝访问C:Documents and Settings寒夜孤星del /f C:Chuxuezhe.txtC:Documents and Settings寒夜孤星说明:由于文件被修改为只读属性,删除被拒绝。C:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星attrib +r C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Chuxuezhe.txt拒绝访问C:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Hanye.txt拒绝访问C:Documents and Settings寒夜孤星说明:由于文件被修改为只读属性,删除被拒绝。使用C:Hanye.txt,将结果输出。因为1 是 重定向输出操作符的默认句柄。所以C:Hanye.txt输出的仅是标准输出,不含错误输出。C:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星attrib +r C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Chuxuezhe.txt拒绝访问C:Documents and Settings寒夜孤星del C:Chuxuezhe.txtnul拒绝访问C:Documents and Settings寒夜孤星说明:由于文件被修改为只读属性,删除被拒绝。使用nul,将结果输出。因为1 是 重定向输出操作符的默认句柄。所以nul输出的仅是标准输出,不含错误输出。与上例的区别在于,本例没有将结果输出到文件。xC:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星attrib +r C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Chuxuezhe.txt拒绝访问C:Documents and Settings寒夜孤星del C:Chuxuezhe.txtnul 2nulC:Documents and Settings寒夜孤星说明:由于文件被修改为只读属性,删除被拒绝。使用nul,将结果输出。因为1 是 重定向输出操作符的默认句柄。所以nul输出的仅是标准输出,不含错误输出。与上例的区别在于,本例二次重定向输出为2nul。因为2 是 重定向输出操作符的错误标准输出。所以2nul屏蔽了“拒绝访问”。C:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星attrib +r C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Chuxuezhe.txt拒绝访问C:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Hanye.txt 2C:Guxing.txtC:Documents and Settings寒夜孤星说明:本例对照上例,将1句柄输出到C:Hanye.txt。将2句柄输出到C:Guxing.txt。通过读取文本 Hanye.txt 和 Guxing.txt 我们明确句柄1和2分别输出的是什么,上例中屏蔽的究竟是什么信息。C:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星del C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del /f /q C:Chuxuezhe.txt找不到 C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del /f /q C:Chuxuezhe.txt 1nul找不到 C:Chuxuezhe.txtC:Documents and Settings寒夜孤星del /f /q C:Chuxuezhe.txt 2nulC:Documents and Settings寒夜孤星del /f /q C:Chuxuezhe.txtnul 2nulC:Documents and Settings寒夜孤星C:WINDOWSsystem32命令提示符Microsoft Windows XP 版本 5.1 2600 版权所有 1985-2001 Microsoft Corp.C:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星del /f /q /s C:Chuxuezhe.txt删除文件 - C:Chuxuezhe.txtC:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星del /f /q /s C:Chuxuezhe.txt 2nul删除文件 - C:Chuxuezhe.txtC:Documents and Settings寒夜孤星echo Hanye GuxingC:Chuxuezhe.txtC:Documents and Settings寒夜孤星del /f /q /s C:Chuxuezhe.txtnul 1nulC:Documents and Settings寒夜孤星既然 2nul 就可以屏蔽错误信息输出,我们为什么还要用到 nul 2nul 呢?我们看下一个示例就明白了。在 del 命令中虽然使用了 /q 参数来静默删除,但因为同时也使用了 /s 参数,使得删除的文件信息被以标准输出到句柄,必须用 1nul 即 nul 来屏蔽。在实际使用中,例如要删临时文件夹中极其子文件夹中的文件,可以使用命令:del /f /s /q %Temp%*.*因为要删除 %temp% 子目录中的文件,所以必须使用 /s 参数。而使用了 /s 参数,就会显示正在被删除的文件名。该信息被1句柄以标准输出,所以要使用 1nul 来屏蔽。而 %temp% 中部分文件有可能因正在被某些程序调用而不能被删除,该信息被2句柄以错误输出,所以要用 2nul 来屏蔽。所以,这个命令如果要屏蔽所以输出的信息,就必须写成:del /f /s /q %Temp%*.*nul 2nul综上所述,nul 意为将此句命令所产生的标准输出请求重新定向到空设备中,而因为此设备的缄默特性,即相当于将此语句的输出信息屏蔽(并非隐藏);而 2nul 则是将程序执行错误时的标准错误信息输出请求重定向后屏蔽。它们联合使用,即为将此语句所可能产生的所有输出信息屏蔽。、二次重定向什么是二次重定向呢? nul 2nul 就是一个典型的二次重定向。一般情况下,二次重定向不会有问题产生,但也有例外,例如:echo. 2nul 3nul执行这个命令后,所有出错误提示均看不到了echo. 1nul 3nul执行这个命令后,所有的输出提示均看不到了(但是错误提示会显示)?这两个命令却无法同时使用。还有执行以下语句后将会一直循环显示,无法停上:echo. 0nul 3nul另外:echo. 2nul 3test.txt以后就会将出错信息写入到test.txt中.同理,echo. 1nul 3test.txt就会将标准输出信息写入到test.txt中.为什么会这样呢?这确实是一个有意思且有意义的主题。关于这个奇怪的现象,因为未见于公开的官方文档,所以它似乎是介于未公开特性与程序算法漏洞之

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论