You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按文件名前缀批量压缩文件:批处理脚本故障修复求助

批量压缩同前缀文件的批处理脚本修复

需求描述

需要将文件夹中文件名前缀(至第二个右括号)相同的所有文件(无论扩展名)合并压缩,压缩包以对应的.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*.*")

问题分析

  1. 第一个For循环的通配符语法错误:(*)*)*.m3u)括号不匹配,正确的通配符应为*(*)*.m3u
  2. 前缀提取逻辑错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:00:24