如何在批处理文件中的FOR-IF语句中设置变量?

时间:2019-01-27 09:17:35

标签: windows batch-file

我写了一个批处理文件,假定该文件可以创建多个文件夹,编号从1到20,并且填充数字小于小于10且为0。它创建了文件夹,但没有填充它们,即1,2,3 ...,但我希望它是01,02,03。

FOR /L %%G IN (1,1,20) DO (
    IF %%G LSS 10 (
      SET J=0
      md %J%%%G
    ) ELSE (
      SET J=""
      md %J%%%G
    )
)
@pause

1 个答案:

答案 0 :(得分:0)

一个简单的想法,根据我的评论,使用两行代码:

@FOR /L %%A IN (1,1,9) DO @MD 0%%A 2>NUL
@FOR /L %%A IN (10,1,20) DO @MD %%A 2>NUL

您也可以通过不必不必要地设置变量来在一排中做到这一点:

 @FOR /L %%A IN (1,1,20) DO @IF %%A LSS 10 (MD 0%%A 2>NUL) ELSE MD %%A 2>NUL

或者您可以在循环之前设置变量:

@SET "J=0"
@FOR /L %%A IN (1,1,20) DO @IF %%A LSS 10 (MD "%J%%%A" 2>NUL) ELSE MD %%A 2>NUL

您仍然可以在循环中设置变量,并使用Call强制将其展开:

@FOR /L %%A IN (1,1,20) DO @IF %%A LSS 10 (SET "J=0" && CALL MD "%%J%%%%A" 2>NUL) ELSE MD %%A 2>NUL

或使用延迟扩展对其进行扩展:

@SETLOCAL ENABLEDELAYEDEXPANSION
@FOR /L %%A IN (1,1,20) DO @IF %%A LSS 10 (SET "J=0" && MD "!J!%%A" 2>NUL) ELSE MD %%A 2>NUL

您可以解析结果以删除开头的1

@FOR /L %%A IN (101,1,120) DO @SET "VAR=%%A" && CALL MD "%%VAR:~-2%%" 2>NUL

或使用延迟扩展:

@SETLOCAL ENABLEDELAYEDEXPANSION
@FOR /L %%A IN (101,1,120) DO @SET "VAR=%%A" && MD !VAR:~-2! 2>NUL