1

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

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

4

2 回答 2

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
)

您会看到 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
于 2016-11-14T19:38:50.547 回答
1

你应该这样写:

@echo off
setlocal enableDelayedExpansion
for /L %%r in (1,1,5) do (
  echo %%r
  set "var=00%%r"
  echo !var!
)
pause
于 2016-11-14T19:51:41.700 回答