我正在尝试制作一个 for 循环来产生回声。
例子:
for /l in (1,1,12) do (set valt=00%g & echo %valt%)
我在等 :
001 002 003 等等...
但是它返回了我十二倍的值 0012。
你能告诉我为什么循环不起作用吗?
答案1
每行一个输出:
> set "_valt=0" & for /l %g in (1,1,12)do @call set "_valt=00%~g" & cmd /v /c echo\!_valt:~-3!
001
002
003
004
005
006
007
008
009
010
011
012
所有输出都在同一行:
> set "_valt=0" & for /l %g in (1,1,12)do @call set "_valt=00%~g" & cmd /v /c <nul set /p "=!_valt:~-3!"
001 002 003 004 005 006 007 008 009 010 011 012
您需要在运行时在同一行上获取扩展变量的值:
使用 FOR 等循环命令、复合或括号表达式,
延迟扩展将允许您始终读取变量的当前值。
您可以写入带有或不带有延迟扩展的新变量值。无需延迟扩展,您可以在一行中交换两个变量的值:
Set "var1=%var2%" & set "var2=%var1%"
当延迟扩展生效时,可以使用 !variable_name! 立即读取变量
您可以在一行中将两个变量设置为同一件事:
Set "var3=April" & set "var4=!var3!"
CMD.exe /?
启动一个新的 CMD shell 并(可选)运行命令/可执行程序。句法 CMD [字符集] [选项]
CMD [字符集] [选项] [/C 命令]
选项
/C 运行命令然后终止
/V:ON 启用延迟环境变量扩展
这允许 FOR 循环指定 !variable! 而不是 %variable%
expanding the variable at execution time instead of at input time.