Windows 带填充的批处理文件夹循环

Windows batch folder loop with padding

我想编写一个批处理脚本来遍历一组带有零填充的文件。我在使用 set 时遇到问题,因为它似乎在我的迭代中使用最后一个数字作为应该使用的值。 这是我拥有的:

 @echo off
for /L %%r in (1,1,%1) do (
echo %%r
set "var=00%%r"
echo %var%
)

当 运行 输入为 5 时,我将其作为输出:

1
005
2
005
3
005
4
005
5
005

我希望它是:

1
001
2
002
3
003
4
004
5
005

如果对此有任何帮助,那就太好了。谢谢

您真的应该阅读有关延迟扩展的主题。当 cmd.exe 解析内容时,(代码块)中的变量仅被评估一次。那1美元从哪里来?应该是 %1 吗?如果你想要一个带前导零的固定长度数字,你应该记住 "Set /A " 将带前导零的数字视为八进制数。这是解决方法

@echo off
Setlocal EnableDelayedExpansion
for /L %%r in (1,1,5) do (
  Set /A var=1000+%%r
  Call echo Pseudo Call %%var:~-3%% %%r
  echo Delayed expansion with exclamation mark !var:~-3! %%r
)

您看到 2 种不同的方法来获取 var

的实际值
Pseudo Call 001 1
Delayed expansion with exclamation mark 001 1
Pseudo Call 002 2
Delayed expansion with exclamation mark 002 2
Pseudo Call 003 3
Delayed expansion with exclamation mark 003 3
Pseudo Call 004 4
Delayed expansion with exclamation mark 004 4
Pseudo Call 005 5
Delayed expansion with exclamation mark 005 5

你应该这样写:

@echo off
setlocal enableDelayedExpansion
for /L %%r in (1,1,5) do (
  echo %%r
  set "var=00%%r"
  echo !var!
)
pause