Windows批处理文件夹循环与填充

时间:2016-11-14 19:25:51

标签: batch-file leading-zero zero-pad

我想编写一个批处理脚本来遍历一组上有零填充的文件。我在使用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

对此的任何帮助都会很棒。感谢。

2 个答案:

答案 0 :(得分:2)

你真的应该读一下延迟扩展的话题。当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
)

您会看到两种不同的方法来获取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

答案 1 :(得分:1)

你应该这样写:

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