将输出重定向到Windows中另一个命令的命令行参数

时间:2009-09-15 08:05:08

标签: windows command arguments

我如何在Windows中使用脚本/命令的输出作为另一个脚本的参数? (管道在这里不起作用,因为其他脚本不能从标准输入读取)

太澄清了:我有一个需要参数arg的AnotherScript,例如:

AnotherScript 12

现在我希望参数(示例中的12)来自脚本的输出,称之为ScriptB。

,我想要一些东西
AnotherScript (ScriptB)

AnotherScript实际上是一个需要参数的python脚本,而ScriptB是一个产生一些数字的cygwin bash脚本,所以我想使用它的方式如下:

c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)

感谢您的回答。但是,考虑到需要费力的'for'构造,我已经重写了AnotherScript以从标准输入中读取。这似乎是一个更好的解决方案。

4 个答案:

答案 0 :(得分:8)

注意:所有这些都要求命令位于批处理文件中。因此,双%符号。

您可以使用for命令捕获命令的输出:

for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x

然后你可以在另一个命令中使用该输出:

AnotherScript %args%

这会导致%args%包含ScriptB输出的最后一行。如果它只返回一行,您可以将其滚动到一行:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x

在批处理文件外使用时,您必须使用%x而不是%%x

但是,如果ScriptB返回多行,则会为每条行运行AnotherScript。您可以通过在第一次循环迭代后断开来绕过这个 - 尽管只在批处理文件中:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof

答案 1 :(得分:3)

您可以将第一个脚本的输出保存到环境变量中,并将其内容作为命令行参数用于第二个脚本,如果这是您想要的。

这样的事情:

for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%

答案 2 :(得分:1)

将数据保存到临时文件中?

或在标准输入和输出中使用命名管道而不是管道。

或从第一个脚本调用另一个脚本并通过命令参数传输数据

答案 3 :(得分:0)

你不是让事情变得比必要的更复杂吗?

从bash调用AnotherScript。如有必要,请安装Cygwin,以便您可以这样做。