2015-02-07 47 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