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

批量重命名多目录文件并移除文件名中的日期

批量移除文件名末尾的日期(遍历所有子目录)

看起来你已经搞定了子目录遍历和目标文件定位的部分,但Windows批处理原生的ren命令确实没法灵活应对可变的日期格式——毕竟你要处理DDMMYYYY、MMDDYYYY、YYYYMMDD这类8位数字的日期段,而且它们都固定在文件名末尾。下面给你两种实用的解决方案:

方案一:PowerShell(推荐,支持灵活正则匹配)

PowerShell的正则处理能力可以轻松覆盖你提到的所有日期格式,而且测试起来更安全:

# 遍历目标目录下所有文件,递归子目录
Get-ChildItem -Path "C:\Users\Dummy\Desktop\UAT\Sample\" -Recurse -File | 
    # 筛选文件名末尾带有 "-+8位数字" 的文件
    Where-Object { $_.BaseName -match '-\d{8}$' } | 
    # 执行重命名:移除末尾的 "-+8位数字" 部分
    Rename-Item -NewName { 
        $newBaseName = $_.BaseName -replace '-\d{8}$', ''
        "$newBaseName$($_.Extension)"
    } -WhatIf

说明:

  • -WhatIf 参数是测试模式,运行时只会显示要重命名的结果,不会实际修改文件。确认输出符合预期后,删掉这个参数再执行即可。
  • 正则-\d{8}$精准匹配文件名(不含扩展名)末尾的-加上8位数字,刚好覆盖你提到的三种日期格式。
  • 不管是.txt、.pdf还是.csv,只要文件符合命名规则,都会被正确处理。

方案二:纯Windows批处理(贴合你原有脚本)

如果你坚持用批处理,可以利用字符串截取来实现,前提是日期部分固定是-加8位数字:

@echo off
setlocal enabledelayedexpansion

:: 目标根目录
set "root=C:\Users\Dummy\Desktop\UAT\Sample\"

:: 递归遍历所有符合 "*-8位数字.扩展名" 的文件
for /r "%root%" %%G in (*-????????.*) do (
    :: 提取文件名(不含扩展名)和扩展名
    set "filename=%%~nG"
    set "extension=%%~xG"
    :: 移除文件名最后9个字符("-" + 8位数字)
    set "newname=!filename:~0,-9!"
    :: 执行重命名
    ren "%%G" "!newname!!extension!"
)

endlocal
echo 重命名完成,按任意键退出...
pause >nul

说明:

  • enabledelayedexpansion必须开启,否则循环里的变量无法正确更新。
  • *-????????.*用来匹配文件名末尾带有-和8位数字的文件,????????代表8个任意字符(这里刚好是数字)。
  • !filename:~0,-9!是截取文件名的前长度-9个字符,因为-加8位数字一共占9个字符。

重要注意事项

  1. 先备份文件:不管用哪种方案,建议先复制一份测试目录,验证没问题后再处理原文件。
  2. 日期格式校验:确保所有要处理的日期都是-开头的8位数字,如果有不带-的情况,需要调整正则或截取规则。
  3. 避免重复命名:如果重命名后出现同名文件,系统会报错,此时需要手动处理冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:48:13