Windows 命令提示符 I/O 重定向
最后修改于 2025 年 7 月 14 日
命令提示符中的 I/O 重定向允许控制输入和输出流。它能够将命令输出发送到文件或其他命令。输入可以从文件读取,而不是从键盘读取。这个强大的功能有助于自动化任务和高效地处理数据。
Cmd 处理三个标准流:stdin(输入)、stdout(输出)和 stderr(错误)。这些可以使用特殊运算符进行重定向。流可以组合、过滤或保存以供将来分析。掌握重定向是有效使用命令行关键。
重定向运算符包括 >、>>、<、| 和 2>。它们修改命令与流的交互方式。一些运算符会覆盖文件,而另一些则会追加。管道通过将一个命令的输出发送到另一个命令的输入来连接命令。
本教程涵盖了 cmd 中所有主要的 I/O 重定向技术。我们将探讨文件重定向、管道、流合并和错误处理。示例演示了从简单到高级的实际应用。
基本定义
理解这些术语对于使用 I/O 重定向至关重要
标准输入 (stdin):默认输入流(键盘)。使用 < 运算符重定向。
标准输出 (stdout):默认输出流(控制台)。使用 > 或 >> 运算符重定向。
标准错误 (stderr):错误输出流(控制台)。使用 2> 运算符重定向。
管道 (|):将一个命令的 stdout 连接到另一个命令的 stdin。允许命令链式操作。
追加 (>>):将输出添加到现有文件,而不是覆盖。保留先前的内容。
基本输出重定向
最简单的重定向是将命令输出发送到文件而不是屏幕。这可以创建日志或保存结果以供将来使用。
@echo off echo Redirecting output to file... dir > filelist.txt echo Done. Check filelist.txt
此脚本演示了基本输出重定向。dir 命令的输出将转到 filelist.txt,而不是控制台。
dir > filelist.txt
将目录列表输出重定向到 filelist.txt。> 运算符会在文件丢失时创建文件,或覆盖现有文件。
echo Done. Check filelist.txt
显示一条消息,确认重定向已成功。echo 的输出仍然显示在控制台上,因为它没有被重定向。
C:\>redirect.bat Redirecting output to file... Done. Check filelist.txt
运行脚本会创建包含目录列表的 filelist.txt 文件。控制台仅显示 echo 消息。
追加输出
追加重定向会将内容添加到现有文件中,而不会丢失先前的内容。这对于随着时间累积的日志非常有用。
@echo off echo First line > log.txt echo Second line >> log.txt echo Third line >> log.txt type log.txt
此脚本展示了如何逐步构建文件。每次 echo 都会追加到 log.txt,而不会擦除之前的行。
echo First line > log.txt
使用 > 创建带有初始内容的 log.txt。随后的命令使用 >> 来追加,而不是覆盖。
echo Second line >> log.txt
将第二行添加到 log.txt。>> 运算符会在需要时创建文件,但如果文件已存在,则会保留其内容。
type log.txt
显示最终文件内容以验证所有行是否已正确添加。type 命令显示文件内容。
C:\>append.bat First line Second line Third line
输出显示 log.txt 的累积内容。每次 echo 都将其行添加到不断增长的文件中。
错误重定向
错误消息通常会与常规输出混合显示在屏幕上。重定向 stderr 可以分离错误,以便更好地处理。
@echo off dir nonexistent 2> errors.txt dir existent > output.txt 2>&1 echo Error messages: type errors.txt echo Output: type output.txt
此脚本演示了错误流处理。第一个命令会生成一个错误,第二个命令显示合并的流。
dir nonexistent 2> errors.txt
尝试列出不存在的目录,并将错误重定向到 errors.txt。2> 运算符仅捕获 stderr。
dir existent > output.txt 2>&1
列出存在的目录,将 stdout 和 stderr 合并到 output.txt。2>&1 将 stderr 重定向到 stdout。
type errors.txt
显示捕获的错误消息。这表明了如何将错误与正常输出分开并单独检查。
C:\>error.bat Error messages: File Not Found Output: Volume in drive C is OS Directory of C:\existent ...
输出显示了分离的错误和合并的流。实际内容取决于目录是否存在。
输入重定向
命令可以从文件读取输入,而不是从键盘读取。这可以自动化交互式程序或处理准备好的输入。
@echo off echo John > names.txt echo Jane >> names.txt echo Bob >> names.txt sort < names.txt
此脚本演示了输入重定向。它创建了一个包含名称的文件,然后使用文件输入对其进行排序。
echo John > names.txt
创建包含第一个名称的 names.txt。随后的追加会构建一个要处理的名称列表。
sort < names.txt
按字母顺序对 names.txt 中的行进行排序。< 运算符将文件内容作为命令输入。
C:\>input.bat Bob Jane John
输出显示了来自输入文件的排序后的名称。sort 命令从未等待键盘输入。
管道命令
管道通过将一个命令的输出发送到另一个命令的输入来连接命令。这可以实现强大的多步骤处理。
@echo off dir | find "txt" > textfiles.txt echo Text files found: type textfiles.txt
此脚本演示了命令管道。它列出目录内容,过滤出文本文件,并保存结果。
dir | find "txt"
将目录列表通过管道传递给 find 命令,该命令过滤出包含“txt”的行。| 连接了这两个命令。
> textfiles.txt
将过滤后的输出重定向到 textfiles.txt。这结合了管道和文件重定向以进行最终存储。
C:\>piping.bat Text files found: 05/01/2025 12:00 PM 120 notes.txt 05/01/2025 12:00 PM 240 report.txt
输出仅显示目录列表中的 .txt 文件。确切的文件取决于您的目录内容。
来源
本教程涵盖了命令提示符中 essential 的 I/O 重定向技术。掌握这些概念可以实现强大的命令行自动化和数据处理。