无法多次引用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
我正在编写一个批处理脚本来重新格式化不同供应商的目录,但我遇到了 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