【问题标题】:How to use the output of 2 applications as the input of another (Windows/DOS batch files)?如何使用 2 个应用程序的输出作为另一个(Windows/DOS 批处理文件)的输入?
【发布时间】: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.exeapp2.exe 的输出超过 1 行。不幸的是,从 WSH 加载 PS 似乎会显着降低性能。
  • 然后使用 wsh 做你想做的事。它可以捕获输出并运行程序和处理文件。
  • @user14797724 谢谢。我正在努力,但遇到了性能问题:请参阅stackoverflow.com/questions/65534737/…
  • fc 命令接受命令行参数,这些参数不同于控制台输入,因此不能使用重定向或管道。临时文件有什么问题?

标签: batch-file pipe stdout stdin fc


【解决方案1】:

您有 10 个可以重定向的文件流。但是,您只能通过管道将程序传递给程序(这会创建一个临时文件来执行此操作)。

【讨论】:

  • 流根本没有帮助,因为fc 只是不读取STDIN(流0)...
【解决方案2】:

fc command 需要命令行参数来指定包含要比较的输入数据的文件。

fc 不读取控制台输入(STDIN,hande 0;参见Redirection),这与命令行参数完全不同,因此您不能使用输入重定向(<)或管道(|,右侧有fc)来提供输入数据。

所以你将不得不使用临时文件,就像你已经做过的那样。

【讨论】:

  • 谢谢!很好的答案!这个答案是一个写得很好的例子,说明如何写“对不起,你已经在做最好的方式了,这些是关于原因的具体细节。”赞成接受!
  • @aschipfl 还没有人回答我的问题link。你的回答也适用于我的问题,对吧?我想要实现的目标是不可能的吗?
  • 是的,@Rabinzel,这个答案也适用于你的问题; fc 命令无法从重定向句柄读取其输入数据,因此您必须使用临时文件...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 2015-01-01
相关资源
最近更新 更多