2015-02-07 43 views
1

我试图写一个批处理文件,执行以下操作:命令行:使用for循环创建目录随名

  1. 提示用户该目录下创建新的文件夹最新
  2. 一个整数
  3. 提示用户限制
  4. 创建目录最新
  5. CD 最新的
  6. FOR循环为极限迭代
    • 创建目录 “月” + 迭代

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


\报告\月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 

如果我设置限制 = 12,我得到12条的错误消息指出:

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

我很感激帮助。

回答

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

你有标准的delayed expansion的问题 - 关于这个数以百计的文章。

在块语句(a parenthesised series of statements),所述整个块被解析并然后执行。该块内的任何%var%将在该块被解析时由该变量的值取代 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)

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

两种常用方法是: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

+0

帮助太多了。我不知道我为什么过度复杂化。我不是在执行之前和之后分析的代码之间的区别。 – fyrtoes 2015-02-08 14:25:49