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

如何用cmd或批处理批量替换指定目录名中的特定字符串?

批处理替换目录名中的特定字符串解决方案

问题分析

你需要批量替换目录名中指定子串(例如将1900abcd - 1900wxyz改为1700abcd - 1700wxyz,保留其他部分不变),提供的代码存在语法和变量命名问题,以下是修正后的可运行版本及说明。

修正后的批处理代码

@echo off
setlocal enabledelayedexpansion

:: 设置要替换的旧子串和新子串
set "oldsubstring=1900"
set "newsubstring=1700"

:: 处理当前目录下的所有目录(如需指定路径,将*替换为"目标路径\*",比如"C:\Test\*")
for /d %%D in (*) do (
    set "foldername=%%D"
    set "newfoldername=!foldername:%oldsubstring%=%newsubstring%!"
    :: 仅当新名称与原名称不同时执行重命名,避免无效操作
    if not "!foldername!"=="!newfoldername!" (
        ren "%%D" "!newfoldername!"
    )
)

endlocal
echo 目录名替换完成
pause

关键修正点说明

  • 变量命名:原代码中folder name包含空格,批处理变量名不建议使用空格,改为foldername避免语法错误。
  • 重命名命令格式:ren命令的两个参数之间必须有空格,修正为ren "%%D" "!newfoldername!"。
  • 增加判断逻辑:添加if not判断,仅当新名称与原名称不同时执行重命名,避免无意义的重复操作。
  • 路径适配:如果需要处理指定路径下的目录,将for /d %%D in (*)改为for /d %%D in ("你的目标路径\*"),例如for /d %%D in ("D:\Projects\*")。

递归处理子目录(可选)

如果需要替换指定路径下所有层级的子目录名,可使用递归遍历写法:

@echo off
setlocal enabledelayedexpansion

set "oldsubstring=1900"
set "newsubstring=1700"
set "targetpath=D:\你的目标路径"

:: /r 参数表示递归遍历所有子目录
for /d /r "%targetpath%" %%D in (*) do (
    set "foldername=%%~nxD"
    set "newfoldername=!foldername:%oldsubstring%=%newsubstring%!"
    if not "!foldername!"=="!newfoldername!" (
        ren "%%D" "!newfoldername!"
    )
)

endlocal
echo 递归替换目录名完成
pause

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:35:06