[批处理]重定向中的秘密(句柄备份)
### 重定向中的秘密(句柄备份) #### 一、重定向基础概念 重定向是计算机编程中的一个重要概念,主要用于改变程序的输入或输出位置。通过使用特定的符号,可以在命令行环境中改变输入来源或输出目标,从而实现更加灵活的数据处理。 #### 二、重定向符号及其作用 在批处理脚本中,主要使用以下几种重定向符号: 1. **<**:从文件或设备(例如默认的`con`即键盘)中读取命令输入。 2. **>**:将命令输出写入到文件或设备(例如`prn`打印机)中。 3. **>>**:将命令输出追加到文件末尾,而不覆盖原有内容。 4. **<&**:从后一个句柄读取输入并写入到前一个句柄输出中。 5. **>&**:将前一个句柄的输出写入到后一个句柄作为输入。 6. **|**:读取前一个命令的输出作为后一个命令的输入,通常称为管道符。 #### 三、句柄概述 句柄是用来标识输入输出流的一个数值标识符。批处理脚本中的句柄主要包括以下几种: 1. **STDIN (0)**:标准输入,默认从键盘输入。 2. **STDOUT (1)**:标准输出,默认输出到命令提示符窗口。 3. **STDERR (2)**:标准错误输出,默认输出到命令提示符窗口。 4. **UNDEFINED (3-9)**:这些句柄由应用程序和各个具体工具单独定义。 #### 四、句柄的备份与恢复 在进行重定向操作时,系统会自动备份句柄的原始指向,以便在重定向结束后能够恢复句柄的初始状态。备份过程遵循以下规则: 1. **备份机制**:当句柄的指向被修改时,会自动备份到下一个未使用的句柄(通常是3至9之间的句柄)。如果所有句柄都被使用,则不会进行备份。 2. **恢复机制**:当命令执行完成后,句柄会自动恢复到备份时的状态,无论备份句柄是否被修改。 #### 五、示例解析 1. **暂停命令屏蔽示例**:`pause>nul` - 此命令将`pause`命令的标准输出重定向到`nul`,这意味着`pause`命令的默认输出("请按任意键继续")将不会显示出来。 - 实际上,在执行这个命令之前,句柄1(标准输出)的默认指向是`con`(命令提示符窗口)。 - 在执行该命令时,句柄1的指向被临时改为`nul`之前,会先将其指向备份到句柄3中。 - 执行完命令后,句柄1会恢复到之前的指向`con`,而句柄3则恢复到未使用状态。 2. **多重重定向示例**:`echo你好!>nul>hello.txt>prn>con` - 这个例子展示了多个重定向操作。根据规则,最终有效的重定向是最后一个,即`>con`。 - 前面的重定向操作`>nul`、`>hello.txt`和`>prn`都会被忽略,只有最后一个`>con`生效。 - 因此,`echo`命令的输出将被显示在命令提示符窗口中。 3. **句柄复制示例**:`echo哇,这就是传说中的树叶吗?>con3>nul` - 此命令中,`echo`的输出首先被发送到`con`(命令提示符窗口),然后句柄1的标准输出被重定向到`nul`,但在执行重定向之前,句柄1的原始指向被备份到了句柄3。 - 结果是,`echo`的输出显示在命令提示符窗口,同时句柄1被临时指向`nul`,之后又恢复到指向`con`。 #### 六、总结 重定向是批处理脚本中一个非常实用的功能,通过使用适当的重定向符号,可以实现对输入输出的灵活控制。句柄备份与恢复机制确保了即使进行了复杂的重定向操作,句柄也能正确地回到初始状态,保持批处理脚本的稳定性和可靠性。理解这些基础知识对于编写高效、可靠的批处理脚本至关重要。
剩余6页未读,继续阅读
- DeepBlueTears2015-07-28很详细的介绍了批处理中重定向的规则和应用,不错的资料。
- 粉丝: 1
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助