将 Windows 命令行的输出重定向到文本文件

记录和排除在Windows上运行的命令或批处理作业的行为的最有用的方法之一是将输出重定向到文件。

但是,有几种不同的方法可以将命令行写入重定向到文件。您选择的选项取决于您希望如何查看命令输出。

Windows 命令提示符输出的工作原理(How Windows Command Prompt Output Works)

当您在Windows控制台(命令提示符(command prompt))中键入命令时,该命令的输出将转到两个单独的流。

  • STDOUT:标准输出(Out)是来自命令的任何标准响应。例如,DIR命令的标准响应是目录中的文件列表。
  • STDERR标准错误(Standard Error)是命令出现问题时出现的任何错误消息。例如,如果目录中没有任何文件,DIR命令将输出“ File Not Found”到标准错误(Standard Error)流。

对于这两个输出流,您可以将输出重定向到Windows中的文件。(Windows)

将标准输出写入重定向到新文件(Redirect Standard Output Write to New File)

有两种方法可以将命令的标准输出重定向到文件。第一种是每次运行命令时将命令输出写入发送到一个新文件。

为此,请打开命令提示符并键入:

dir test.exe > myoutput.txt

> 字符告诉控制台将STDOUT 输出(STDOUT)到具有您提供的名称的文件。

运行此命令(run this command)时,您会注意到命令窗口中没有任何响应,除了文件不存在的错误。

这是因为该命令的标准输出被重定向到名为 myoutput.txt 的文件。该文件现在存在于您运行该命令的同一目录中。标准错误输出仍然像往常一样显示。

注意(Note):在运行命令之前,请小心更改命令提示符的活动目录(change the active directory)。这样您就可以知道输出文件的存储位置。

您可以通过在命令窗口中键入“myoutput.txt”来查看文件的标准输出。这将在您的默认文本文件查看器中打开文本文件。对于大多数人来说,这通常是Notepad.exe

下次您运行相同的命令时,之前的输出文件将被删除。将使用最新命令的输出重新创建一个新的输出文件。

将标准输出(Standard Output)写入重定向到同一文件(Same File)

如果您不想覆盖同一个文件怎么办?另一种选择是使用 >> 而不是 > 来重定向到输出文件。在此示例中,您将键入:

dir test.exe >> myoutput.txt

您将看到相同的输出(仅限错误)。

但在这种情况下,此命令不会覆盖输出文件,而是将新输出附加到现有输出文件中。

每次运行命令并将输出附加到文件时,它都会将新的标准输出写入现有文件的末尾。

将标准错误重定向到文件(Redirect Standard Error To a File)

与您可以将标准输出写入重定向到文件的方式相同,您也可以将标准错误流输出到文件。

为此,您需要将2>添加到命令的末尾,然后是要创建的输出错误文件。

在此示例中,您将键入命令: 

dir test.exe > myoutput.txt 2> output.err

这会将标准输出流发送到 myoutput.txt,将标准错误流发送到 output.err。结果是控制台窗口中根本没有显示任何输出流。

但是,您可以通过键入output.err(output.err)查看错误消息。这将在您的默认文本文件查看器中打开该文件。

如您所见,命令中的任何错误消息都会输出到错误文件中。与标准输出一样(Just),您可以使用>>将错误附加到先前运行的命令的错误中。

将所有输出写入重定向到同一文件(Redirect All Output Writes to a Same File)

上述所有方法都会产生多个文件。一个文件用于标准输出流,另一个用于标准错误流。

如果您想将这两个输出包含到同一个文件中,您也可以这样做。为此,您只需使用以下命令将所有输出重定向到同一文件。

dir test.exe 1> myoutput.txt 2>&1

以下是此命令的工作原理:

  • 标准输出被定向到由输出编号 1 标识的输出文件。
  • 由数字 2 标识的标准错误输出被重定向到由数字 1 标识的输出文件。

这会将错误输出附加到标准输出的末尾。

这是查看一个文件中任何命令的所有输出的有用方法。 

使标准或错误输出流静音(Silencing Standard or Error Output Streams)

您还可以通过将输出重定向到NUL而不是文件来关闭标准输出(Standard Output)标准错误。(Standard Error)

使用上面的示例,如果您只需要标准输出(Standard Output)而根本不需要标准错误(Standard Error),则可以使用以下命令:

dir test.exe 1> myoutput.txt 2>nul

这将产生与上面第一个示例相同的输出文件,其中您仅重定向了Standard Output,但使用此命令,错误不会在控制台内回显。它也不会创建错误日志文件。

如果您不关心任何错误并且不希望它们成为麻烦,这将很有用。

您可以从BAT 文件(inside a BAT file)中执行上述任何相同的输出命令,该行的输出将转到您指定的输出文件。这是查看BAT文件中的任何命令在尝试运行时是否有任何错误的有用方法。



About the author

我是一名技术人员,多年来一直在音频和用户帐户领域工作。我有使用 Windows 和 Mac 电脑以及苹果产品的经验。自 2007 年以来,我还一直在教授 Apple 产品的使用。我的主要专业领域是用户帐户和家庭安全。除此之外,我还使用过各种软件程序,包括 Windows 7 Home Premium、8.1 Pro、10 Pro 和 12.9 Mojave。



Related posts