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

问题描述:

如何在Windows中将脚本/命令的输出用作另一个脚本的参数? (A管|不会在这里工作,因为其他脚本不从标准输入读取)将输出重定向到Windows中另一个命令的命令行参数

太澄清:我有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) 

感谢您的答案。然而,鉴于需要费力的'for'构造,我重写了AnotherScript以从标准输入中读取。这似乎是一个更好的解决方案。

+0

它会帮助我们,如果你告诉我们'其他脚本'*做*从那里读取,如果不是标准输入。 – Amber 2009-09-15 08:07:51

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

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

我即将发布相同的答案。你打败了我! :) – Paulius 2009-09-15 08:22:43

+0

我应该工作,而不是挂在SO上:-) – Joey 2009-09-15 08:29:09

+0

对于非批处理文件的使用情况,如果你想让第二个脚本在每一行上运行,以下工作'cmd/v:on'然后'for/f“delims =”%x in('findstr string files_eg * .csv')do(set y =%x&set z =!y :: = ,!&echo!z!)>> results.txt '(用逗号代替冒号) – mpag 2016-09-30 18:18:40

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

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

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

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

事情是这样的:

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

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

从bash调用AnotherScript。如有必要,请安装Cygwin,以便您可以执行此操作。

+0

问题是(是)AnotherScript需要一个参数,而且这个参数是scriptB的返回值。 – Rabarberski 2009-09-16 06:34:33

+5

scriptB | xargs AnotherScript – reinierpost 2009-09-16 11:19:21