You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让.bat脚本识别含空格内容并批量修改文件名?

批量重命名脚本:替换小写+删除指定带空格的括号内容

我懂你每周要处理几百个文件的痛点——手动用工具批量改太费时间,现有脚本只能处理Digital转小写,却搞不定删掉(2 covers)这类带空格的括号内容对吧?下面给你两种解决方案,按需选择:

方案1:删除固定格式的内容(比如仅(2 covers)

如果你的文件里要删除的就是固定的(2 covers),这个简单脚本就能搞定,同时保留你原来的小写替换逻辑:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

REM 替换Digital为digital
SET "old=Digital"
SET "new=digital"

REM 定义要删除的目标字符串
SET "remove_str=(2 covers)"

for /f "tokens=* delims=" %%f in ('dir /b *.*') do (
    SET "newname=%%f"
    REM 执行小写替换
    SET "newname=!newname:%old%=%new%!"
    REM 删除指定的带空格括号内容
    SET "newname=!newname:%remove_str%=!"
    
    REM 仅当文件名有变化时才执行移动,避免无效操作
    IF NOT "!newname!"=="%%f" (
        move "%%f" "!newname!"
        echo 已处理: "%%f" → "!newname!"
    )
)

ENDLOCAL
pause

关键改进点:

  • for循环加了delims=,确保能正确读取带空格的完整文件名
  • 添加了专门的删除逻辑,直接把(2 covers)替换为空(也就是删除)
  • 增加了文件名变化判断,避免重复移动同一个文件,还加了进度提示方便你跟踪处理情况

如果还有其他类似固定格式要删(比如(3 covers)),只要多加一行SET "newname=!newname:(3 covers)=!"就行。

方案2:删除任意数字的(n covers)格式

如果你的文件里有(2 covers)(5 covers)这类不同数字的情况,上面的固定替换就不够用了。下面这个脚本可以自动识别并删除所有(数字 covers)格式的内容:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET "old=Digital"
SET "new=digital"

for /f "tokens=* delims=" %%f in ('dir /b *.*') do (
    SET "newname=%%f"
    REM 先处理小写替换
    SET "newname=!newname:%old%=%new%!"
    
    REM 循环查找并删除所有(n covers)格式的内容
    :clean_covers
    echo !newname! | findstr /i "([0-9]* covers)" >nul
    IF NOT ERRORLEVEL 1 (
        REM 定位左括号的位置
        SET "temp=!newname!"
        SET "before="
        :find_open_bracket
        IF NOT "!temp:~0,1!"=="(" (
            SET "before=!before!!temp:~0,1!"
            SET "temp=!temp:~1!"
            GOTO find_open_bracket
        )
        REM 定位右括号的位置
        SET "after=!temp:~1!"
        SET "middle_content="
        :find_close_bracket
        IF NOT "!after:~0,1!"==")" (
            SET "middle_content=!middle_content!!after:~0,1!"
            SET "after=!after:~1!"
            GOTO find_close_bracket
        )
        REM 检查括号内是否包含"covers"(不区分大小写)
        echo !middle_content! | findstr /i " covers" >nul
        IF NOT ERRORLEVEL 1 (
            REM 拼接删除后的文件名
            SET "newname=!before!!after:~1!"
            GOTO clean_covers
        ) ELSE (
            GOTO end_clean
        )
    )
    :end_clean
    
    IF NOT "!newname!"=="%%f" (
        move "%%f" "!newname!"
        echo 已处理: "%%f" → "!newname!"
    )
)

ENDLOCAL
pause

这个脚本的逻辑:

它会循环检查文件名,找到所有包含(数字 covers)的部分,定位括号的位置后确认内容符合要求,再删除整个括号区域,直到没有这类内容为止。

使用注意事项

  1. 先在测试文件夹里试运行脚本,确保效果符合预期再批量处理正式文件
  2. 如果文件名里有特殊字符(比如!),可能需要调整延迟扩展的设置,不过漫画文件名一般不会有这类字符
  3. 脚本会处理当前文件夹下的所有文件,如果你只想处理.cbr文件,可以把dir /b *.*改成dir /b *.cbr

内容的提问来源于stack exchange,提问作者gosunkugi

火山引擎 最新活动