批量相当于Bash反引号

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

my_command `echo Test` 

将是一样的事情

 my_command Test 

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

我只是想知道你是否可以在批处理中做同样的事情。

您可以通过首先将输出redirect到文件来完成。 例如:

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

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

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

是的,这是不明显的(至less可以这样说),但是那里有什么。

for /? 为血淋淋的细节。

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

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

可悲的是,我没有login到Windows自己检查,但我认为这样可以近似你想要的东西:

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

也许我搞砸了for /f方法的标准语法,但是当我把一个非常复杂的命令涉及&&和| 在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 

通过首先将完整的和复杂的命令放入一个variables中,然后将该variables的引用放在限制中,而不是将复杂命令直接放到for循环的极限中,这样可以避免语法解释问题。 目前,如果我将上面示例中设置的VVvariables的确切命令复制到了%VV% ,则会导致语法错误。

你总是可以在Windows中运行Bash 。 我一直用MSYS (比Cygwin更有效)。