批处理脚本问题:延迟扩展丢失链接!字符,无法使用findstr
解决批处理生成带编号Mega链接列表的字符丢失与崩溃问题
最近折腾了个批处理脚本,想从Mega远程目录生成带编号的链接列表,结果踩了俩让人头疼的坑:
- 链接里的
!字符会被延迟扩展直接移除,导致链接彻底失效(这可是Mega链接里的必要组成部分啊) - 尝试用
findstr提取链接时,它会把链接和文件名放在同一行,只要文件名里带括号,脚本直接崩溃;只能靠usebackq获取纯链接,但又绕回第一个丢!的问题,完全陷入矛盾循环。
好在最后总算捣鼓出可行的代码了,分享给遇到同样问题的朋友:
@echo off :start: megals --reload /Root/ set /p var1="dir? " & megals /Root/%%var1%% for /f "tokens=1,* delims=:" %%A in ('megals -n /Root/%%var1%% ^|findstr /n "." ') do ( set Link[%%A]=%%B Echo %%A %%B ) setlocal DisABLEDELAYEDEXPANSION set /a c=0 FOR /F "tokens=1 usebackq" %%i in (`megals -n -e /Root/%%var1%%`) do ( set /a c+=1 call set "string[%%c%%]=%%i" ) set /P number="Enter number: " FOR /F "tokens=*" %%g IN ('call echo %%string[%number%]%%') do (SET VAR2=%%g) echo %Var2% echo. Megadl %VAR2% & echo. && goto :start: pause
关键改进点说明:
- 关闭延迟扩展保留特殊字符:在存储链接的代码块中启用
setlocal DisABLEDELAYEDEXPANSION,避免链接中的!被延迟扩展解析删除;同时用call set间接赋值,确保带特殊字符的链接能正确存入数组变量。 - 拆分编号与链接避免崩溃:先用
findstr /n "."给megals的输出添加行号,再通过tokens=1,* delims=:拆分编号和链接内容,这样显示带编号列表时不会触发文件名含括号的崩溃问题。 - 间接读取变量保证完整性:用
call echo %%string[%number%]%%配合for /f读取指定编号的链接,避开直接引用变量时的特殊字符解析问题,确保链接能完整传递给megadl命令。
内容的提问来源于stack exchange,提问作者Jim Jamil
相关产品推荐
相关产品推荐

