输出重定向到Windows中的另一个命令的命令行参数(Redirecting output to a

2019-07-18 02:05发布

我怎样才能在Windows中,使用脚本/命令的输出作为另一个脚本的说法? (A管|不会在这里工作,因为其他脚本不从标准输入读取)

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

AnotherScript 12

现在我想的参数(12中的例子)来自一个脚本输出,称之为ScriptB。 所以我想沿着东西线

AnotherScript (ScriptB)

该AnotherScript实际上是一个Python脚本,需要一个参数,并ScriptB是一个cygwin bash脚本,产生一些数字,所以我想用它的方式是这样的:

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

感谢您的答案。 然而,鉴于费力“为”结构需要,我已经重写AnotherScript从标准输入读取。 这似乎是一个更好的解决方案。

Answer 1:

注:所有这些都需要的命令是在一个批处理文件。 因此,双%迹象。

您可以使用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


Answer 2:

你可以第一个脚本的输出保存到一个环境变量和使用它作为命令行参数的内容到第二个脚本,如果这是你想要的。

事情是这样的:

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


Answer 3:

将数据保存到一个临时文件?

或在标准输出使用命名管道,而不是管的。

或者从第一个呼叫其他脚本,并经由命令参数传送数据



Answer 4:

你是不是做事情的方式比需要更复杂?

从bash的通话AnotherScript。 必要时,安装Cygwin只是让你可以做到这一点。



文章来源: Redirecting output to a command-line argument of another command in Windows