我正在尝试在当前目录中创建目录“01”、“02”、“03”、...、“11”和“12”。但是由于未知原因,我的“0”填充“函数”在 for 循环中不起作用。
@Echo on
SET suffix=12
SET v=0%suffix%
SET v=%v:~-2%
echo %v%
pause
(SET suffix=12
SET v=0%suffix%
SET v=%v:~-2%
echo %v%)
pause
FOR /L %%q IN (9,1,11) DO (
SET suffixb=%%q
SET w=0%suffixb%
SET w=%w:~-2%
echo %w%
)
pause
最佳答案
在批处理文件中,每一行或每一行(括号内的代码)都被解析、执行,并为下一行/块重复该过程。在解析阶段,所有变量读取都被删除,在代码开始执行 之前被变量 中的值替换。如果变量在行/块内更改其值,则无法从同一行/块内检索此更改的值,因为变量读取操作不存在。
通常的解决方法是使用延迟扩展。启用后,您可以(在需要时)将语法从 %var%
更改为 !var!
,向解析器指示必须延迟读取操作,直到使用该值的命令开始执行。
setlocal enabledelayedexpansion
for /l %%a in (101 1 112) do (
set "name=%%a"
md "!name:~-2!"
)
关于循环中的 Windows 批处理字符串操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28832255/