2016-03-14 33 views
1

我正在嘗試製作一個批處理文件,該文件將根據用戶輸入在桌面上生成一個文件夾。這裏是我的代碼:在批處理文件中使用用戶輸入在桌面上創建文件夾

echo What do you want the folder to be called? 
SET /p folderName= 
md C:\Users\%username%\desktop\%folderName% 

但是,每當我試試這個,它給了我一個錯誤說:

A subdirectory or file C:\Users\Razi\desktop\ already exists. 

它似乎並沒有被注意到的%folderName%末。 有人可以告訴我我的代碼有什麼問題並給出替代方案嗎?謝謝!

+0

您的批處理文件適用於我。只有當我按Enter鍵而不指定子文件夾名稱時,我纔會得到與您相同的結果。 – ConnorsFan

+0

它適合我。嘗試回顯變量並暫停以查看它的價值。此外,如果您不輸入任何內容,將會出現該錯誤。 – CalebB

+0

我修好了,謝謝! – Coder101

回答

0

很顯然,%folderName%看起來是空的,正如您在包含md命令接收的路徑參數的錯誤消息中所看到的。所以md試圖創建已經存在的目錄Desktop

如果即使輸入有效的目錄名稱時仍然出現錯誤,我確信代碼片段是圓括號之間的塊的一部分,在這種情況下,您需要啓用並應用delayed expansion。否則,在整個模塊執行之前,您需要讀取folderName值。

例如,以下塊被命令解釋器視爲單個命令行; %folderName%膨脹(通過它的值代替)只要整個線/塊被解析:

(
    echo What do you want the folder to be called? 
    set /P folderName= 
    md "%USERPROFILE%\desktop\%folderName%" 
) 

在下文中,延遲擴展被使能(由setlocal);要實際使用它,%擴展已更改爲!;所以!folderName!擴展(讀取)後,只要它被執行:

setlocal EnableDelayedExpansion 
rem ... 
(
    echo What do you want the folder to be called? 
    set /P folderName= 
    md "%USERPROFILE%\desktop\!folderName!" 
) 
rem ... 
endlocal 

注意的folderName改變值,一旦不再爲endlocal已執行,或批處理文件終止(其中,隱含endlocal發生)。

除了上述,我把引號的路徑圍繞在md命令,以避免與白色空格或特殊字符的麻煩,我改變了C:\Users\%USERNAME%%USERPROFILE%Stephan's comment建議。

相關問題