ОБНОВЛЕНИЕ Я изменил код, чтобы правильно получить имя родительского каталога.
Это пример вложенного цикла FOR
(упоминаемого в комментариях), который выможно использовать для извлечения родительского элемента каталога, который поступает из каждой строки ввода.
@SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "delims=" %%G IN (List.txt) DO (
SET "PARENT=%%~dpG"
REM Strip off the trailing backslash. ~p leaves the backslash at the end.
SET "PARENT=!PARENT:~0,-1!"
FOR /F "delims=" %%P IN ("!PARENT!") DO (
CALL :createLink "%%~nxG" "%%~nxP" "%%~dpP"
)
)
EXIT /B
:createLink
будет вызываться с именем каталога «leaf» в качестве первого параметра, именем (только—Не путь) родительского каталога этого каталога и путь к родительскому каталогу этого каталога в качестве третьего.Я понимаю, что это не совсем то, чего хочет ваш код, но поскольку я не совсем понимаю, чего вы хотите достичь (не то, что это неправильно - то, как вы используете данные, просто кажется мне необычным), по крайней мере, два изтри части информации здесь (хотя я не знаю, какие из двух) выглядят так, как вы просите.
Хотя goto :eof
обычно работает (если вы не определили :eof
где-то, кроме концафайл), я предпочитаю EXIT /B
, поскольку он прост и делает именно то, что вы хотите.
Для тестирования я использовал это как List.txt
C:/folder1/folder2/folder3/folder4
C:/folder1/folder12/folder113/folder1114/folder/folder11115
C:\folderA\folderB\folderC\folderD
Если я добавлю некоторую отладку вкод выше:
@SETLOCAL ENABLEDELAYEDEXPANSION
@ECHO OFF
FOR /F "delims=" %%G IN (List.txt) DO (
@ECHO G: %%~G
SET "PARENT=%%~dpG"
SET "PARENT=!PARENT:~0,-1!"
FOR /F "delims=" %%P IN ("!PARENT!") DO (
@ECHO P: %%~P
CALL :createLink "%%~nxG" "%%~nxP" "%%~dpP"
)
)
EXIT /B
:createLink
@ECHO :createLink
@ECHO Arg 1: %~1
@ECHO Arg 2: %~2
@ECHO Arg 3: %~3
EXIT /B
Тогда вывод, который я получаю при запуске сценария:
G: C:/folder1/folder2/folder3/folder4
P: C:\folder1\folder2\folder3
:createLink
Arg 1: folder4
Arg 2: folder3
Arg 3: C:\folder1\folder2\
G: C:/folder1/folder12/folder113/folder1114/folder/folder11115
P: C:\folder1\folder12\folder113\folder1114\folder
:createLink
Arg 1: folder11115
Arg 2: folder
Arg 3: C:\folder1\folder12\folder113\folder1114\
G: C:\folderA\folderB\folderC\folderD
P: C:\folderA\folderB\folderC
:createLink
Arg 1: folderD
Arg 2: folderC
Arg 3: C:\folderA\folderB\