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

如何修改批处理脚本实现子目录文件按父目录前缀递归重命名?

批处理脚本修改方案:提取父目录前缀重命名文件

你的脚本问题出在%%~nxx的使用上——它会直接取子目录的完整名称(比如test1.noxz),导致重命名后文件名变成test1.noxz.xz,不符合提取.之前前缀的需求。

修改后的脚本如下:

@echo off
for /r /d %%x in (*) do (
    for %%y in (xz) do (
        for %%f in ("%%x\*.%%y") do (
            :: 以点为分隔符,提取子目录名的第一部分
            for /f "delims=. tokens=1" %%p in ("%%~nx") do (
                ren "%%f" "%%p.%%y"
            )
        )
    )
)

关键修改说明:

  • 新增for /f "delims=. tokens=1" %%p in ("%%~nx"):通过delims=.设置分隔符为点,tokens=1只取第一部分内容,从子目录名(如test1.noxz)中提取出test1
  • 重命名命令改为ren "%%f" "%%p.%%y":用提取到的前缀%%p替换原文件名,保留原后缀%%y

如果你的子目录名格式固定为xxx.noxz(仅含一个点),也可以用更简洁的变量替换写法替代内层的for /f:

@echo off
for /r /d %%x in (*) do (
    set "dirName=%%~nx"
    setlocal enabledelayedexpansion
    set "prefix=!dirName:.noxz=!"
    for %%y in (xz) do (
        ren "%%x\*.%%y" "!prefix!.%%y" 2>NUL
    )
    endlocal
)

注意这种写法需要启用延迟变量扩展(enabledelayedexpansion),因为在循环中动态修改变量需要延迟扩展支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:06