按文件名前缀批量压缩文件:批处理脚本故障修复求助
批量压缩同前缀文件的批处理脚本修复
需求描述
需要将文件夹中文件名前缀(至第二个右括号)相同的所有文件(无论扩展名)合并压缩,压缩包以对应的.m3u文件命名。示例文件如下:
- "After the war (1989)(Dinamic)(Disk 1 of 2)(cr Replicants).st"
- "After the war (1989)(Dinamic)(Disk 2 of 2)(cr Replicants).st"
- "After the war (1989)(Dinamic)(cr Replicants).m3u"
原脚本尝试遍历.m3u文件提取前缀后压缩,但无法包含同前缀的其他文件:
For %%i in (*)*)*.m3u) do For /F "tokens=2delims=)" %%B in ("%%i") Do ("C:Program Files\7-Zip\7z.exe" -mx9 a "%%~ni.zip" "%%i" "%%B*.*")
问题分析
- 第一个
For循环的通配符语法错误:(*)*)*.m3u)括号不匹配,正确的通配符应为*(*)*.m3u - 前缀提取逻辑错误:
tokens=2 delims=)仅提取了第二个分隔符前的片段,无法得到完整的「至第二个右括号」的前缀,导致后续匹配文件失败
修复后的脚本
@echo off setlocal enabledelayedexpansion :: 遍历所有包含至少两个括号的.m3u文件 for %%i in (*(*)*.m3u) do ( :: 提取文件名(不含扩展名) set "filename=%%~ni" :: 按右括号拆分文件名,取前两部分拼接成完整前缀(包含第二个右括号) for /F "tokens=1,2 delims=)" %%a in ("!filename!") do ( set "prefix=%%a)%%b)" ) :: 调用7-Zip压缩:压缩包用当前.m3u文件名命名,匹配所有前缀一致的文件 "C:\Program Files\7-Zip\7z.exe" -mx9 a "%%~ni.zip" "!prefix!*" ) endlocal
脚本说明
setlocal enabledelayedexpansion:启用延迟环境变量扩展,保证循环内变量赋值能即时生效for %%i in (*(*)*.m3u):精准匹配包含至少两组括号的.m3u目标文件for /F "tokens=1,2 delims=)":将文件名按)拆分,取前两段后重新拼接,得到完整的「至第二个右括号」的前缀(如After the war (1989)(Dinamic))"!prefix!*":匹配所有以该前缀开头的文件,自动涵盖所有扩展名的相关文件
内容的提问来源于stack exchange,提问作者Planet Indigo
相关产品推荐
相关产品推荐

