批量相当于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
”来完成,因为echo
是cmd.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循环的极限中,这样可以避免语法解释问题。 目前,如果我将上面示例中设置的VV
variables的确切命令复制到了%VV%
,则会导致语法错误。
你总是可以在Windows中运行Bash 。 我一直用MSYS (比Cygwin更有效)。