【发布时间】:2021-04-08 12:55:53
【问题描述】:
在 Windows/DOS 批处理文件中,当您想将一个应用程序的输出用作另一个应用程序的输入时,您可以使用管道符号:
app1.exe | app2.exe
我正在尝试做一些更复杂的事情。我想使用 2 个程序的输出作为另一个程序的输入。具体来说:
fc.exe [output of app1.exe] [output of app2.exe]
显然,我可以做到以下几点
app1.exe > tmp1.txt
app2.exe > tmp2.txt
fc.exe tmp1.txt tmp2.txt
但是有没有更好的方法来做到这一点,最好不创建临时文件?
请注意,我正在做的事情是专门使用 Windows/DOS 外部应用程序 fc.exe (FileCompare),所以如果该工具有任何特殊技巧,欢迎提供特定的答案。
与 Linux 类似的问题是:Redirect two or more STDOUT to a single STDIN
【问题讨论】:
-
如果应用程序的输出只有一行,您可以使用
for循环捕获它们并进行字符串比较。如果输出是多行,我建议改用 PowerShell(逻辑相同,但 PS 可以处理多行变量) -
@Stephan 感谢您的想法。它通过 WSH 运行,
app1.exe和app2.exe的输出超过 1 行。不幸的是,从 WSH 加载 PS 似乎会显着降低性能。 -
然后使用 wsh 做你想做的事。它可以捕获输出并运行程序和处理文件。
-
@user14797724 谢谢。我正在努力,但遇到了性能问题:请参阅stackoverflow.com/questions/65534737/…
-
fc命令接受命令行参数,这些参数不同于控制台输入,因此不能使用重定向或管道。临时文件有什么问题?
标签: batch-file pipe stdout stdin fc