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' ломает петли? Также нет необходимости в 'call' в этих операторах' set'. – wOxxOm

+0

% G% - это переменная окружающей среды. Вы ошиблись и хотите иметь %% G из переменной FOR? – 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 
Смежные вопросы