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

求可批量重命名子目录文件的Windows批处理脚本

Windows批量重命名子目录文件脚本

以下是满足你需求的批处理脚本,能自动处理所有子目录下的文件,按要求完成重命名:

@echo off
setlocal enabledelayedexpansion

:: 遍历所有子目录下的文件(不含目录)
for /r %%f in (*) do (
    :: 分离文件名和扩展名
    set "filename=%%~nf"
    set "ext=%%~xf"

    :: 把文件名里的所有点替换为空格
    set "processed=!filename:.= !"

    :: 查找第一个4位数字(年份)的位置并处理
    set "new_name="
    set "found_year="
    for /l %%i in (0,1,30) do (
        if "!found_year!"=="" (
            :: 截取当前位置开始的4个字符,判断是否为4位数字
            set "temp=!processed:~%%i,4!"
            echo !temp!|findstr /r "^[0-9][0-9][0-9][0-9]$">nul
            if not errorlevel 1 (
                :: 提取年份前的内容,加上(年份)
                set "prefix=!processed:~0,%%i!"
                set "year=!temp!"
                set "new_name=!prefix!(!year!)"
                set "found_year=1"
            )
        )
    )

    :: 如果找到有效年份则执行重命名
    if not "!new_name!"=="" (
        set "full_new_name=!new_name!!ext!"
        :: 避免文件名重复或不必要的重命名
        if not "!full_new_name!"=="%%~nxf" (
            ren "%%f" "!full_new_name!"
            echo 已重命名:"%%~nxf" -> "!full_new_name!"
        )
    ) else (
        echo 未找到有效年份,跳过:"%%~nxf"
    )
)

endlocal
pause

脚本说明

  • 替换点为空格:通过set "processed=!filename:.= !"将文件名中的所有点替换成空格,扩展名的点会被单独保留。
  • 识别并处理年份:通过循环截取字符串,用findstr匹配4位数字,找到第一个年份后,截取其前面的内容并将年份用括号包裹。
  • 遍历子目录:使用for /r递归遍历所有子目录下的文件,无需手动逐个目录处理。

使用方法

  1. 将上述代码保存为rename_files.bat。
  2. 把该批处理文件放到需要处理的根目录下。
  3. 双击运行即可,脚本会自动处理所有子目录文件,并输出重命名日志。

你之前尝试代码的问题

  • 第一个脚本仅用点分割文件名,无法识别年份,也不能处理子目录。
  • 第二个脚本是固定匹配特定文件名格式的替换,不具备通用性,无法处理你提供的示例文件名结构。

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

相关产品推荐
方舟 Agent Plan

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

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