Bash backticks的批处理等价物

Bash backticks的批处理等价物,bash,batch-file,backticks,Bash,Batch File,Backticks,使用Bash时,我可以将一个命令的输出放入另一个命令中,如下所示: my_command `echo Test` 这和 my_command Test (显然,这只是一个不实际的例子。) 我只是想知道您是否可以批量执行相同的操作。您可以先将输出重定向到文件。例如: echo zz > bla.txt set /p VV=<bla.txt echo %VV% echo zz>bla.txt set/p VV=您可以使用cmd.exe脚本和/f命令获得类似的功能: for /f "

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

my_command `echo Test`
这和

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


我只是想知道您是否可以批量执行相同的操作。

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

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

set/p VV=您可以使用cmd.exe脚本和/f
命令获得类似的功能:

for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a
是的,这有点不明显(至少可以这么说),但这是事实

有关血淋淋的详细信息,请参见
获取/?


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

您总是可以在Windows中运行。我一直在使用(比使用更高效)。

阅读“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%
,则会导致语法错误。

需要您找到一个具有写入权限的位置来存储临时文件;你必须自己打扫卫生;本示例仅允许您读取输入的第一行。就所有实际用途而言,
For/f
变体是一个更好的变体。@grawity-与
%random%
@joey一起,它确实读取每一行,但如何在单个命令中连接到命令行参数。它如何处理换行符?当从不会自动生成shell的外部程序执行shell内置时,通常必须这样做。也就是说,C的
system()
很好,iirc,因为它在任何情况下都会启动shell,但.NET的
进程.Start
需要显式调用shell。像这样的,iirc。在任何情况下,我认为这是比接受的更好的答案:-对于 > <代码>的选项不会伤害,但混淆了这个问题。关于这一点:
对于(“'echo Test')中的/f%%a,在命令行上执行我的_命令%%a时,而不是在批处理脚本中执行该命令时,请使用单个%而不是%%。这似乎对管道不起作用,例如“>”操作符。但除此之外,这真是太棒了。除非这只是我的%vs%%问题。@Evan:
tokens=*
很重要。否则,如果命令的结果包含空格,则只输出第一个字。在提示下运行此命令:
对于(“'echo foo bar')中的/f%a执行echo“%a”
。它将打印
“foo”
。可能的相关副本对我来说不起作用,但我发现,如果使用克拉(^)对for命令进行转义,则可以直接在for命令中执行管道:for/f“usebackq tokens=*”%%a in(`command^ command`)do command%%a@Heptite卡逃走对我不起作用,但是用双引号括起来的命令行确实如此。@Heptite在我的例子中,我不知道我需要事先运行的一系列命令,它们在一个例子中是从文件中提取出来的,在另一个例子中是传入的。使用转义时,您需要知道根据命令将要运行的解释器的数量来转义命令的次数,在我的用例中,解释器的数量并不一致。不幸的是,MSYS现在几乎没有维护,要获得最新的bash,您需要单独安装它。BusyBox甚至更小(~432KB)。虽然不是一场完整的狂欢,只是灰烬。在此处获取非官方的Windows端口:如果其他人在从批处理文件(*.bat)执行命令时偶然发现此端口,则两个%i变量都必须是双百分号:%%i。