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