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

批量修改文件名:将前缀替换为所在文件夹名(批处理求助)

批处理修正方案

你的代码核心问题是没有保留原文件名中Bf110G2_后的部分,直接用文件夹名替换了整个文件名主体,导致重命名结果不符合需求。以下是修正后的代码及说明:

修正后的批处理代码

@Echo OFF
SetLocal EnableDelayedExpansion

:: 递归遍历所有子文件夹
FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
    :: 筛选当前文件夹下以Bf110G2_开头的文件
    FOR %%@ in ("Bf110G2_*") DO (
        :: 提取原文件名(不含扩展名)
        set "orig_name=%%~n@"
        :: 将原文件名中的"Bf110G2"替换为当前文件夹名
        set "new_name=!orig_name:Bf110G2=%%~n#!"
        :: 打印预览重命名操作(可删除该行直接执行)
        Echo 准备重命名: "%%@" → "!new_name!%%~x@"
        :: 执行重命名
        Ren "%%@" "!new_name!%%~x@"
    )
    POPD
)

EndLocal
Pause&Exit

关键修正点

  1. 启用延迟扩展:SetLocal EnableDelayedExpansion解决for循环内部变量赋值与读取的同步问题,确保替换后的文件名能正确获取。
  2. 保留原文件后缀内容:通过字符串替换!orig_name:Bf110G2=%%~n#!,仅替换前缀Bf110G2为当前文件夹名,保留原文件名中_之后的所有内容。
  3. 预览操作:Echo行用于提前查看重命名结果,确认无误后可删除该行直接执行实际重命名。

特殊情况处理(匹配你的示例)

如果你的示例中ju88a4文件夹需要输出ju88_xxx(即截取文件夹名前4位),可在代码中添加文件夹名截取逻辑:

@Echo OFF
SetLocal EnableDelayedExpansion

FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
    :: 截取文件夹名前4位(可根据需求调整数字)
    set "folder_name=%%~n#"
    set "folder_short=!folder_name:~0,4!"
    FOR %%@ in ("Bf110G2_*") DO (
        set "orig_name=%%~n@"
        set "new_name=!orig_name:Bf110G2=!folder_short!"
        Echo 准备重命名: "%%@" → "!new_name!%%~x@"
        Ren "%%@" "!new_name!%%~x@"
    )
    POPD
)

EndLocal
Pause&Exit

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:20:57