对于循环 3 位数字格式未按预期工作

对于循环 3 位数字格式未按预期工作

我正在尝试制作一个 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.

相关内容