112

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

my_command `echo Test`

my_command Test

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

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

4

5 回答 5

114

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”来完成,因为echo它是 的内部命令cmd.exe,但它以更自然的方式工作。Windows 批处理脚本总是以某种方式让我感到惊讶(但通常不是很好)。

于 2010-05-04T20:15:23.797 回答
64

您可以通过首先将输出重定向到文件来做到这一点。例如:

echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
于 2010-05-04T20:15:00.937 回答
35

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

可悲的是,我没有登录到 Windows 来亲自检查它,但我认为这样的事情可以近似于你想要的:

for /F %i in ('echo Test') do my_command %i
于 2010-05-04T20:15:34.967 回答
4

也许我搞砸了标准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%,则会导致语法错误。

于 2014-01-28T22:49:14.330 回答
2

你总是可以在 Windows 中运行Bash 。我一直用MSYS做这件事(比Cygwin效率高得多)。

于 2010-05-04T20:15:32.427 回答