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

Command Line: Using a for loop to create directories with increasing names

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

  1. 提示用户创建新文件夹的目录最新
  2. 提示用户输入整数 limit
  3. 创建目录最新
  4. CD 最新
  5. FOR 循环 limit 次迭代
    • 创建目录"Month " + 迭代

例如:
最新 = 报告
限制 = 12
我应该结束:


\Reports\Month 1
\Reports\Month 2
\Reports\Month 3
...
\Reports\Month12

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

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.

感谢您的帮助。

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

您遇到了标准的 delayed expansion 问题 - 关于此问题的 SO 上有数百篇文章。

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

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

克服这个问题的两种常见方法是 1) 使用 setlocal enabledelayedexpansion 并使用 !var! 代替 %var% 来访问 var 的更改值或 2)调用子例程以使用更改后的值执行进一步处理。

因此请注意 CALL ECHO %%var%% 的使用,它显示 var 的更改值。 CALL ECHO %%errorlevel%% 显示,但遗憾的是随后重置错误级别。

所以 - 你可以使用

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

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