.bat 文件如何对 list.txt 中的每一行重复处理(按列表创建快捷方式)

.bat file how to repeat process for each row in list.txt (creating shortcuts by list)

我的代码现在创建了指向 "list.txt" 中第一行的快捷方式,名称正确(作为调用快捷方式目标中的最后一个文件夹),但我需要对整个 "list.txt" 执行相同的过程,对于每一行, 就好像我为每一行添加了 'skip=1',然后 'skip=2'..... 到 'for /f':

for /f "skip=1 usebackq delims=" %%G IN (List.txt) DO if not defined line set "line=%%G"

我无法在一个 bat 文件中对每一行重复此过程。怎么做?

@echo off
Setlocal EnableExtensions
for /f "usebackq delims=" %%G IN (List.txt) DO if not defined line set "line=%%G"
set LNKNAME=%line:~0%
for %%f in ("%LNKNAME%") do set LNKNAME_A=%%~nxf
SET SAVETO=%userprofile%\desktop

    call :createLink "%LNKNAME_A%" "%line%"

pause

rem createLink <linkname> <target>
:createLink
set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "%SAVETO%\%~1.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "%~2" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%
cscript /nologo %SCRIPT%
del %SCRIPT%
EXIT /B 0
rem goto :eof

扩展你的循环:

@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!"没有任何用处,我们可以去掉它,直接使用%%Gfor %%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"
)
...

(注意:不再需要延迟扩展)