无法多次引用for循环变量的值

Unable to reference value of for loop variable multiple times

我正在编写一个批处理脚本来重新格式化不同供应商的目录,但我遇到了 for 循环问题。

到目前为止,脚本采用包含文件 (SampleDirectory) 的原始目录,并将由供应商名称组成的第一级文件夹复制到 "NewDirectory",这将是目标目录重组后的文件将被移动到。接下来我要做的是遍历 "NewDirectory" 中的路径并找到供应商的名称,这是最低级别的目录。从那里,我将使用供应商名称,并将其附加到 NewDirectory 路径的末尾,以便我可以在新文件夹中创建子目录。

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

FOR /D %%G IN (C:\webnet\Guy3015\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\Guy3015\NewDirectory\Arrington Arms
DirPath:   C:\webnet\Guy3015\NewDirectory\Arrington Arms
DirFolder: Arrington Arms
G:         %G

预期输出:

G:         C:\webnet\Guy3015\NewDirectory\Arrington Arms
DirPath:   C:\webnet\Guy3015\NewDirectory\Arrington Arms
DirFolder: Arrington Arms
G:         C:\webnet\Guy3015\NewDirectory\Arrington Arms

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

G:         C:\webnet\Guy3015\NewDirectory\Bosch
DirPath:   C:\webnet\Guy3015\NewDirectory\Bosch
DirFolder: Bosch
G:         C:\webnet\Guy3015\NewDirectory\Bosch

再次感谢!

我相信这就是你想要完成的。

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

FOR /D %%G IN (C:\webnet\Guy3015\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