Bash 反勾的批处理等价物

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

my_command `echo Test`

就会变成

my_command Test

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

我只是想知道你能不能在 Batch 做同样的事情。

53912 次浏览

你可以先将输出重定向到一个文件,例如:

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

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

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

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

有关血淋淋的细节,请参见 for /?

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

你总是可以在 Windows 中运行 Bash。我总是用 MSYS来运行(比 Cygwin高效得多)。

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

遗憾的是,我并没有登录 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

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