Answers:
您可以通过首先将输出重定向到文件来实现。例如:
echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
for /f
变体是更好的变体。
%random%
您可以通过以下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批处理脚本总是以某种方式使我感到惊讶(但通常不是一种很好的方式)。
system()
很好,iirc,因为在任何情况下它都会启动外壳程序,但是.NET Process.Start
需要显式调用外壳程序。iirc这样的东西。无论如何,我认为这是比公认的答案更好的方法:-)
for
不会伤害但会混淆问题的选项。那怎么办:for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
很重要。否则,如果命令的结果包含空格,则仅输出第一个单词。在提示符下运行此:for /f %a in ('"echo foo bar"') do echo "%a"
。它将打印"foo"
。
也许我搞砸了标准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%
,则会导致语法错误。