我正在尝试编写执行以下操作的批处理文件:
例如:
最新 =报告
限制 = 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.
我很感激帮助。
答案 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%%
更改值的var
。 CALL ECHO %%errorlevel%%
显示,但遗憾的是RESETS错误级别。
所以 - 你可以使用
set "month_counter=Month %%i"
CALL echo %%month_counter%%
如果你真的,真的想 - 或者其他一种技术,但是如图所示,简单地从常量数据+ %%i
中的迭代计数器中创建目录要容易得多。