0

我正在處理批處理腳本以重新格式化不同供應商的目錄,並且我遇到了有關for循環的問題。無法多次引用for循環變量的值

到目前爲止,腳本採用包含文件的原始目錄(SampleDirectory),並將第一級文件夾(由供應商名稱組成)複製到「NewDirectory」,該目錄將成爲重新組織的目標目錄文件將被移至。接下來我要做的是遍歷「NewDirectory」中的路徑並查找供應商的名稱,這是最低級別的目錄。從那裏,我將使用供應商名稱,並將其附加到NewDirectory路徑的末尾,以便我可以在新文件夾中創建子目錄。

:start 
MKDIR "C:\webnet\Guy\113015\NewDirectory" 
ROBOCOPY "C:\webnet\Guy\113015\SampleDirectory" "C:\webnet\Guy\113015\NewDirectory" /E /LEV:2 /XF 
PAUSE 

FOR /D %%G IN (C:\webnet\Guy\113015\NewDirectory\*) DO (
SETLOCAL ENABLEDELAYEDEXPANSION 
ECHO G:   %%G 
CALL SET DirPath=%%G 
CALL SET DirFolder=!DirPath! 
:GetFolder 
CALL SET GetFolderTemp=!DirFolder:*\=! 
IF NOT !GetFolderTemp!==!DirFolder! (
    SET DirFolder=!GetFolderTemp! 
    GOTO :GetFolder 
) 
ECHO DirPath: !DirPath! 
ECHO DirFolder: !DirFolder! 
ECHO G:   %G% 
PAUSE 
ENDLOCAL 
) 
ECHO ! 
PAUSE 

我現在遇到的問題是,我只是通過第一個文件夾,並得到它的標題。我感覺好像我已經覆蓋for循環的變量,導致它早期結束。

輸出:

G:   C:\webnet\Guy\113015\NewDirectory\Arrington Arms 
DirPath: C:\webnet\Guy\113015\NewDirectory\Arrington Arms 
DirFolder: Arrington Arms 
G:   %G 

預期輸出:再次

G:   C:\webnet\Guy\113015\NewDirectory\Arrington Arms 
DirPath: C:\webnet\Guy\113015\NewDirectory\Arrington Arms 
DirFolder: Arrington Arms 
G:   C:\webnet\Guy\113015\NewDirectory\Arrington Arms 

G:   C:\webnet\Guy\113015\NewDirectory\Arrington Arms - Copy 
DirPath: C:\webnet\Guy\113015\NewDirectory\Arrington Arms - Copy 
DirFolder: Arrington Arms - Copy 
G:   C:\webnet\Guy\113015\NewDirectory\Arrington Arms - Copy 

G:   C:\webnet\Guy\113015\NewDirectory\Bosch 
DirPath: C:\webnet\Guy\113015\NewDirectory\Bosch 
DirFolder: Bosch 
G:   C:\webnet\Guy\113015\NewDirectory\Bosch 

謝謝!

+3

你知道'goto'打破了循環嗎?這些'set'語句中也不需要'call'。 – wOxxOm

+0

%G%是一個環境變量。您是否錯誤輸入並且意味着FOR變量中有%% G? – Squashman

+0

我想你要找的是'%%〜nxG' – Squashman

回答

0

我相信這是你正在努力完成的。

:start 
MKDIR "C:\webnet\Guy\113015\NewDirectory" 
ROBOCOPY "C:\webnet\Guy\113015\SampleDirectory" "C:\webnet\Guy\113015\NewDirectory" /E /LEV:2 /XF 
PAUSE 

FOR /D %%G IN (C:\webnet\Guy\113015\NewDirectory\*) DO (
SETLOCAL ENABLEDELAYEDEXPANSION 
ECHO G:   %%G 
SET DirPath=%%G 
SET DirFolder=%%~nxG 
ECHO DirPath: !DirPath! 
ECHO DirFolder: !DirFolder! 
ECHO G:   %%G 
ECHO. 
ENDLOCAL 
) 
PAUSE