批量相当于Bash反引号

时间:2010-05-04 20:07:32

标签: bash batch-file backticks

使用Bash时,我可以将一个命令的输出放到另一个命令中,如下所示:

my_command `echo Test`

是一回事
my_command Test

(显然,这只是一个非实际的例子。)

我只是想知道你是否可以批量做同样的事情。

5 个答案:

答案 0 :(得分:93)

您可以使用带有for /f命令的cmd.exe脚本获得类似的功能:

for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a

是的,它有点不明显(至少可以说),但它就是那里的。

有关血淋淋的详细信息,请参阅for /?

旁注:我认为在“echo”命令的反引号中使用“for /f”需要使用“cmd.exe /c echo Test”来完成,因为echocmd.exe的内部命令,但它以更自然的方式工作。 Windows批处理脚本总是让我感到惊讶(但通常不是很好)。

答案 1 :(得分:53)

您可以先将输出重定向到文件。例如:

echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%

答案 2 :(得分:26)

阅读“for”命令的文档:for /?

可悲的是,我没有登录Windows自行检查,但我认为这样的事情可以近似你的想法:

for /F %i in ('echo Test') do my_command %i

答案 3 :(得分:3)

您始终可以在Windows中运行Bash。我一直使用MSYS(比Cygwin更有效率)。

答案 4 :(得分:3)

也许我搞砸了标准for /f方法的语法,但当我提出一个涉及&amp;&amp;的非常复杂的命令时和|在for /f限制内的反引号中,它会导致问题。通常的轻微修改可以处理任意复杂性命令:

SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling
for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a

首先将完整且复杂的命令放在变量中,然后将变量的引用置于限制中,而不是将复杂命令直接置于for循环的限制中,可以避免语法解释问题。目前,如果我将上面示例中设置为VV变量的确切命令复制到使用它的位置%VV%,则会导致语法错误。