просто разверните цикл:
@echo off
Setlocal EnableExtensions enabledelayedexpansion
SET "SAVETO=%userprofile%\desktop"
for /f "usebackq delims=" %%G IN ("List.txt") DO (
set "line=%%G"
set "LNKNAME=!line:~0!"
for %%f in ("!LNKNAME!") do set "LNKNAME_A=%%~nxf"
call :createLink "!LNKNAME_A!" "!line!"
)
pause
goto :eof
:createLink
...
Примечание: здесь используется задержка расширения
Редактировать
set saveto=...
выведен из цикла (нет смысла устанавливать одинаковое значение для каждой строки)
Учитывая, что set "LNKNAME=!line:~0!"
ничего не делает, мы можем удалить его и использовать %%G
напрямую. Также for %%f
просто получает %%~nxf
(вы не предоставили пример вашего текстового файла, поэтому я должен догадаться: не должен ли это быть просто %%~nf
?), Что совпадает с %%nxG
(%%~nG
?), Мы также можем удалить его и использовать %%G
и %%nG
напрямую. Это сокращает код до:
@echo off
Setlocal EnableExtensions
SET "SAVETO=%userprofile%\desktop"
for /f "usebackq delims=" %%G IN ("List.txt") DO (
call :createLink "%%~nG" "%%G"
)
...
(Примечание: отсроченное расширение больше не требуется)