使用CMD批量移除含指定子串的文件名中的目标子串
批量移除文件名中的备份时间戳解决方案
修正后的单命令行脚本
这个脚本会仅处理带有目标时间戳的文件,自动跳过文件夹,避免误改其他文件:
cmd /v:on /c "for /R %f in (*(2022_12_15 14_28_40 UTC).*) do @if exist "%f\" (@echo Skipping folder: "%f") else (@set "nn=%~nf" & if "!nn:~-26!"==" (2022_12_15 14_28_40 UTC)" @ren "%~ff" "!nn:~0,-26!%~xf")"
关键修复点:
- 新增
if exist "%f\"判断,识别并跳过文件夹,避免生成无效的文件夹重命名命令 - 增加文件名末尾匹配校验,只有当文件名最后26位是目标时间戳时才执行重命名,防止误改无时间戳的短文件名
- 保留延迟扩展和正确的符号转义,确保文件名中的空格、括号被正确解析
修复后的批处理脚本
这个脚本解决了原脚本的变量赋值与IF判断失效问题,同时提升了可读性:
@echo off setlocal EnableExtensions DisableDelayedExpansion set "Timestamp= (2022_12_15 14_28_40 UTC)" set "TimestampLen=26" for /F "delims=" %%I in ('dir "%~dp0*%Timestamp%.*" /A-D /B /S 2^>nul') do ( set "FullFileName=%%I" set "FileNameOnly=%%~nI" set "FileExtension=%%~xI" setlocal EnableDelayedExpansion if "!FileNameOnly:~-%TimestampLen%!" == "!Timestamp!" ( ren "!FullFileName!" "!FileNameOnly:~0,-%TimestampLen%!!FileExtension!" echo Renamed: "!FullFileName!" → "!FileNameOnly:~0,-%TimestampLen%!!FileExtension!" ) endlocal ) endlocal
关键修复点:
- 将时间戳和长度定义为变量,避免手动计算和输入错误,后续修改时间戳只需更新变量值
- 修正
dir命令的通配符写法,通过变量拼接精准匹配带目标时间戳的文件 - 确保启用延迟扩展后,所有变量使用
!变量!格式访问,解决原脚本中变量赋值后无法正确获取的问题 - 增加重命名操作的输出提示,方便验证处理结果
- 移除可能导致语法错误的冗余代码,确保脚本执行稳定
内容的提问来源于stack exchange,提问作者germinas_boots
相关产品推荐
相关产品推荐

