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

时间:2015-12-02 18:30:40

标签: batch-file for-loop iteration command-prompt directory-structure

我正在处理批处理脚本以重新格式化不同供应商的目录,而我遇到了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

再次感谢!

1 个答案:

答案 0 :(得分: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