31

在命令提示符中-如何将屏幕的所有内容导出到文本文件(基本上是复制命令,而不是使用右键单击和剪贴板)

此命令有效,但仅适用于您执行的命令,不适用于实际输出

doskey /HISTORY > history.txt
4

7 回答 7

23

如果您想追加文件而不是不断地制作新文件/删除旧文件的内容,请使用双>标记。单个>标记将覆盖所有文件的内容。

覆盖文件

MyCommand.exe>file.txt

^这将打开 file.txt 如果它已经存在并覆盖数据,或者创建一个新文件并用你的输出填充它

从端点追加文件

MyCommand.exe>>file.txt

^这将从文件的当前末尾追加 file.txt 如果它已经存在,或者创建一个新文件并用您的输出填充它。


更新 #1(高级):

随着时间的推移,我的批处理功能有所改进,所以这里有一些小的更新。

如果您想区分正确使用标准流STDOUT/的程序的错误输出和正常输出,STDERR您可以通过对语法稍作更改来做到这一点。对于这些示例,我将仅用于覆盖,但在文件管道输出重定向方面,它们与 for append>一起工作得很好。>>

在or1之前是 STDOUT 的标志。如果您需要在重定向符号之前实际输出数字一或二,如果您不了解此机制,这可能会导致奇怪的、不直观的错误。在将单个结果编号输出到文件中时,这一点尤其重要。在重定向符号用于 STDERR 之前。>>>2

既然您知道您有多个可用的流,现在是展示输出到nul. 现在,输出到nul在概念上与输出到文件的工作方式相同。您看不到控制台中的内容。它没有进入文件或控制台输出,而是进入了空白。

STDERR归档并抑制STDOUT

MyCommand.exe 1>nul 2>errors.txt

将STDERR归档以仅记录错误。将 STDOUT 保留在控制台中

MyCommand.exe 2>errors.txt

STDOUT归档并抑制STDERR

MyCommand.exe 1>file.txt 2>nul

STDOUT 用于归档。将 STDERR 保留在控制台中

MyCommand.exe 1>file.txt

STDOUT到一个文件 STDERR另一个文件

MyCommand.exe 1>stdout.txt 2>errors.txt

我在这里唯一需要注意的是,如果其中一个流从未被使用过,它可以为未使用的流创建一个 0 字节的文件。基本上,如果没有发生错误,您最终可能会得到一个 0 字节的 errors.txt 文件。

更新#2

在编写直接STDERR写入. 该问题的问题是我不知道合并流的正确方法,12STDOUT

%command% > outputfile 2>&1

因此,如果您希望所有STDOUT STDERR都通过管道传输到同一个流中,请确保像这样使用它:

MyCommand.exe > file.txt 2>&1

重定向器实际上默认为1>or 1>>,即使您没有1在它前面显式使用,如果您在它前面不使用数字,并且2>&1组合流。

更新#3(简单)

一切都为空

如果你想完全抑制 STDOUT 和 STDERR,你可以这样做。作为警告,并非所有文本管道都使用 STDOUT 和 STDERR,但它适用于绝大多数用例。

STD* 为空 MyCommand.exe>nul 2>&1

复制 CMD 或 Powershell 会话的命令输出

如果您想要的只是刚刚完成的 CMD 或 Powershell 会话的命令输出,或者任何其他 shell,您通常可以从该会话中选择该控制台,CTRL+A选择所有内容,然后CTRL+C复制内容. 然后,您可以对剪贴板中的复制内容执行任何您喜欢的操作。

于 2014-10-07T17:02:48.360 回答
18

看看这个页面

在 cmd 类型中:

Command | clip

然后打开一个*.Txt文件和Paste. 而已。完毕。

于 2013-12-23T06:14:57.630 回答
11

如果您要分别查找每个命令

将命令提示符的所有输出导出到文本文件中。只需遵循以下语法。

C:> [syntax] >file.txt

上述命令将在 file.txt 中创建语法结果。将在您所在的当前文件夹上创建新的 file.txt。

例如,

C:Result> dir >file.txt

要复制整个会话,试试这个:

Copy & Paste a command session as follows:

1.) At the end of your session, click the upper left corner to display the menu.
Then select.. Edit -> Select all

2.) Again, click the upper left corner to display the menu.
Then select.. Edit -> Copy

3.) Open your favorite text editor and use Ctrl+V or your normal
Paste operation to paste in the text.
于 2013-06-11T11:02:20.540 回答
3

如果您的批处理文件不是交互式的并且您不需要看到它运行,那么这应该可以工作。

@echo off
call file.bat >textfile.txt 2>&1

否则使用tee过滤器。有很多,有些与 NT 不兼容。SFK 瑞士军刀具有 tee 功能,并且仍在开发中。也许这对你有用。

于 2013-06-11T15:12:52.053 回答
1

这个怎么样:

<command> > <filename.txt> & <filename.txt>

例子:

ipconfig /all > network.txt & network.txt

这将在记事本而不是命令提示符中给出结果。

于 2014-05-15T01:24:59.037 回答
0

从命令提示符以管理员身份运行。下面的示例是打印在您的 PC 上运行的服务列表,运行以下命令:

net start > c:\netstart.txt

您应该会看到刚刚导出的文本文件的副本,其中列出了在C:\驱动器根目录中运行的所有 PC 服务。

于 2016-04-23T23:12:45.867 回答
0

如果您想输出所有详细信息,而不仅仅是stdout。但是程序发出的任何printf语句、任何警告、信息等,您都必须2>&1在命令行末尾添加。

在您的情况下,命令将是

Program.exe > file.txt 2>&1

于 2018-08-29T21:35:14.873 回答