命令行:使用for循环创建名称不断增加的目录

时间:2015-02-07 15:49:13

标签: batch-file for-loop cmd dos mkdir

我正在尝试编写执行以下操作的批处理文件:

  1. 提示用户创建新文件夹 newest
  2. 的目录
  3. 提示用户输入整数限制
  4. 创建目录最新
  5. CD 最新
  6. 用于限制迭代的FOR循环
    • 创建目录“月”+ 迭代
  7. 例如:
    最新 =报告
    限制 = 12 我最终应该:


    \ Reports \ Month 1
    \报告\第2个月
    \报告\第3个月
    ...
    \报告\第12个月

    到目前为止,这是我的代码:

    setlocal enabledelayedexpansion
    FOR /L %%i IN (1,1,%limit%) DO (
    set "month_counter=Month %%i"
    echo %month_counter%
    MD %month_counter%
    )
    endlocal
    

    如果我设置 limit = 12,我会收到12条错误消息,说明:

    Echo is off.
    The syntax of the command is incorrect.
    

    我很感激帮助。

1 个答案:

答案 0 :(得分:1)

FOR /L %%i IN (1,1,%limit%) DO (
 MD "Month %%i"
)

您有标准的delayed expansion问题 - 有关此问题的数百篇文章。

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)。< / p>

因此,IF (something) else (somethingelse)将在遇到%variables%时使用IF的值执行。

解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion并使用!var!代替%var%来访问已更改的var或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

请注意使用显示CALL ECHO %%var%%更改值的varCALL ECHO %%errorlevel%%显示,但遗憾的是RESETS错误级别。

所以 - 你可以使用

set "month_counter=Month %%i"
CALL echo %%month_counter%%

如果你真的,真的想 - 或者其他一种技术,但是如图所示,简单地从常量数据+ %%i中的迭代计数器中创建目录要容易得多。