如何将标准输入重定向到 Windows 命令行中的文件?

Posted

技术标签:

【中文标题】如何将标准输入重定向到 Windows 命令行中的文件?【英文标题】:How do you redirect standard input to a file in the Windows command line? 【发布时间】:2012-06-05 03:41:56 【问题描述】:

在 Unix 上我会这样做:

cat > file.txt

如何在 Windows 命令提示符或批处理文件中执行此操作?

编辑:基本上,我正在寻找不带参数的cat 的功能(它从标准输入读取并将其吐回标准输出)。

【问题讨论】:

type thisfile > output.txt 推送所有输出与 unix cat type thisfile >> output.txt 将所有输出附加到文件而不覆盖 +1 使用 type 这样一个很酷很简单的解决方案。 @DominicP 除了它不适用于我的目的(在“编辑:”之后阅读) @Matt,是的,不完全一样。我不确定您使用 Windows shell 做了多少工作,但是根据我的经验,找到如此接近 *nix 功能的方法非常少见/很好。 :) 【参考方案1】:

标准输入:

批处理文件:

:: set /p MyVar=   Prompts user for stdin information

set /p MyVar=

echo %MyVar% > filename

【讨论】:

这必须先阅读整个标准输入,不是吗?如果标准输入非常大,似乎不切实际。【参考方案2】:

如果您只想读取标准输入并将读取的内容写入标准输出,那么 FINDSTR 可能会起作用,具体取决于您的使用方式。

只要在参数列表末尾将输入指定为单个文件名,FINDSTR 就会输出输入的精确二进制图像。

findstr "^" file.txt

管道或重定向也可能起作用,具体取决于输入的内容:

findstr "^" < file.txt
or
type file.txt | findstr "^"

如果在使用 FINDSTR 的重定向或管道输入时发生以下任何一种情况,输出将被破坏:

任何输入行 > 8191 字节 最后一行输入没有被 \n 终止。 (如果重定向输入,命令可能会挂起)

如果指定了多个输入文件,FINDSTR 将不起作用,因为在这种情况下,文件名将用作每行输出的前缀。

FINDSTR 与 cat 的不同之处还在于它不能同时从标准输入和命名文件中读取。

请参阅What are the undocumented features and limitations of the Windows FINDSTR command? 了解更多信息。

【讨论】:

EDIT - 更正了有关附加 CR/LF 的管道输入的信息。添加了有关 XP 和 Windows 7 可能因重定向输入而挂起的信息 感谢您的回答!对于那里的其他任何人,将标准输入写入(附加)到文件“foo.txt”的批处理文件是:findstr“^”>>foo.txt @dbenham - findstr "^" &lt; %windir%\system32\calc.exe &gt; c.exe 在 Win7 上给出 Line is too long 错误。不适合二进制复制? @EgorSkriptunoff - 管道和重定向限制 FINDSTR 输入行长度。将输入文件指定为参数(只需删除&lt;)而不是使用重定向,它应该可以工作。有关详细信息,请参阅***.com/a/8844873/1012053 上的行长限制部分。 @EgorSkriptunoff - 我已经更新了答案以包含行长限制。【参考方案3】:

TYPE CON

CON 是用于控制台输入的 MS-DOS 设备。您可以按如下方式重定向到文件:

TYPE CON&gt;output.txt

要终止,请按 Ctrl + CCtrl + ZEnter (Ctrl + Z = EOF)。

【讨论】:

啊哈哈!虽然我猜它可能对其他人有用......我可能是我这个年龄唯一知道将 MS-DOS 变成打字机的优雅 TYPE CON&gt;LPT1 快​​捷方式的人! 许多 *nix 命令的 Windows 替代品确实存在 - 但它们是“进化”的,而不是像 bash 那样被智能设计,因此它们更难找到,而且使用起来通常比它们复杂得多应该是......这种差异的一个很好的例子是 bash 反引号与 DOS 中的等效 FOR 构造。感谢上帝提供 Powershell 和 C#script! 啊,我怎么会忘记在这台双引导机器上提到 Cygwin? :D -1 因为它不起作用:它不是从标准输入读取,而是从控制台读取。 OP 要求提供标准输入。我在win10上测试过。 @Zimba:See this question,或者echo hello | find "hello" &gt;first.txtecho hello | type con &gt;second.txt之间的区别。 first.txt 将包含hello 而不要求输入,但是对于 second.txt 你必须输入一些东西【参考方案4】:

我认为more.exe 可能是您正在寻找的。​​p>

它可以从控制台接受输入:

more > file1.txt

或从TYPE CON 处理的另一个文件通过管道输入:

type file1.txt | more > file2.txt

more 似乎在您的文件中附加了一个换行符并展开了选项卡,所以不要在二进制数据上使用它!)

【讨论】:

其实这个在我有多行的时候有帮助。谢谢 不错。这是唯一一个与标准输入一起工作的。其他解决方案仅通过管道传输 con 或来自另一个文件。

以上是关于如何将标准输入重定向到 Windows 命令行中的文件?的主要内容,如果未能解决你的问题,请参考以下文章

linux中的管道符重定向于环境变量

python怎么重定向输入

shell中的重定向(输入输出)

管道符重定向与环境变量

一文搞懂Linux下的文件的标准输入标准输出输出重定向问题

Shell重定向