如何将标准输入重定向到 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 "^" < %windir%\system32\calc.exe > c.exe
在 Win7 上给出 Line is too long
错误。不适合二进制复制?
@EgorSkriptunoff - 管道和重定向限制 FINDSTR 输入行长度。将输入文件指定为参数(只需删除<
)而不是使用重定向,它应该可以工作。有关详细信息,请参阅***.com/a/8844873/1012053 上的行长限制部分。
@EgorSkriptunoff - 我已经更新了答案以包含行长限制。【参考方案3】:
TYPE CON
CON 是用于控制台输入的 MS-DOS 设备。您可以按如下方式重定向到文件:
TYPE CON>output.txt
要终止,请按 Ctrl + C 或 Ctrl + Z,Enter (Ctrl + Z = EOF)。
【讨论】:
啊哈哈!虽然我猜它可能对其他人有用......我可能是我这个年龄唯一知道将 MS-DOS 变成打字机的优雅TYPE CON>LPT1
快捷方式的人!
许多 *nix 命令的 Windows 替代品确实存在 - 但它们是“进化”的,而不是像 bash 那样被智能设计,因此它们更难找到,而且使用起来通常比它们复杂得多应该是......这种差异的一个很好的例子是 bash 反引号与 DOS 中的等效 FOR
构造。感谢上帝提供 Powershell 和 C#script!
啊,我怎么会忘记在这台双引导机器上提到 Cygwin? :D
-1 因为它不起作用:它不是从标准输入读取,而是从控制台读取。 OP 要求提供标准输入。我在win10上测试过。
@Zimba:See this question,或者echo hello | find "hello" >first.txt
和echo hello | type con >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 命令行中的文件?的主要内容,如果未能解决你的问题,请参考以下文章