2016-01-20 35 views
0

我想弄清楚如何在Windows批處理文件中創建一定數量的文件夾。我想詢問用戶他們想要多少文件夾,然後使用收集的數字循環詢問這些文件夾的名稱並進行設置。以下是我迄今爲止:Windows Cmd循環名稱和創建文件夾

pushd C:\Users\%username%\Desktop 

set /p FolderLoop="How many folders?: " 

for /l %%x in (1, 1, %FolderLoop%) do (
    set /p folder="Folder: " %%x 
    md %folder% %%x 
) 

我把遇到的問題是,我不能用正確的收集名稱進行文件夾。到目前爲止,我所得到的最接近的是創建適當數量的文件夾,但使用基於FolderLoop變量的序列數字名稱(1,2,3等)。

回答

1

您需要delayed expansion

setlocal enabledelayedexpansion 
pushd C:\Users\%username%\Desktop 
set /p FolderLoop="How many folders?: " 
for /l %%x in (1, 1, %FolderLoop%) do (
    set /p "folder=Folder: " 
    md "!folder!" 
) 

(在%%xset /p什麼都不做,我刪除它我也刪除它從md,你不需要它 - 除非你想在櫃檯的一部分。文件夾名稱)。

+0

這就是它!謝謝!我可以告訴它基本上忽略了我試圖調用文件夾名稱的變量。這固定它! (有一件事,只爲其他讀者,延遲enabledelayedexpansion缺少電子:) :) – jakenolan52

+0

'e'插入... btw,你也可以使用'%userprofile%\ desktop' – Stephan

2

您需要閱讀關於SO關於delayedexpansion的數百個響應中的任何一個。

在塊語句(a parenthesised series of statements),所述整個塊被解析並然後執行。該塊內的任何%var%將在該塊被解析時由該變量的值取代 - 在塊執行之前 - 同樣的事情適用於FOR ... DO (block)

在一個塊內聲明(a parenthesised series of statements)REM語句,而不是破碎的標籤備註形式(:: comment)應該被使用,因爲標籤終止塊,混淆cmd

因此,在遇到IF時,將使用%variables%的值執行IF (something) else (somethingelse)。克服這個

兩種常用方法是:1)使用setlocal enabledelayedexpansion並使用!var!代替%var%訪問的var改變的值或2),以調用一個子程序使用改變的值來執行進一步的處理。

因此請注意使用CALL ECHO %%var%%,它顯示var的更改值。 CALL ECHO %%errorlevel%%顯示,但遺憾的是,然後RESETS錯誤級別。

+0

這是非常深入和信息。非常感謝! – jakenolan52

相關問題