您真的应该阅读有关延迟扩展的主题。当 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