如何用Bash或Batch批量自动化重命名日期格式文件夹?
Bash 批量重命名方案
方法1:使用 rename 命令(推荐)
如果你的系统装有Perl版本的rename(多数Linux发行版默认自带),可以用正则表达式一键批量处理:
rename 's/^(\d{2})(\d{2})(\d{2})$/20$1-$2-$3/' [0-9][0-9][0-9][0-9][0-9][0-9]/
正则说明:
^(\d{2})(\d{2})(\d{2})$:精准匹配6位数字的文件夹名,将其拆分为年份后两位、月份、日期三个分组20$1-$2-$3:替换为20+年份分组+-+月份分组+-+日期分组,生成目标格式
方法2:基础 for 循环 + mv 命令(兼容所有Bash环境)
如果没有rename命令,用原生Bash循环处理:
for dir in [0-9][0-9][0-9][0-9][0-9][0-9]/; do dir_name=${dir%/} new_name="20${dir_name:0:2}-${dir_name:2:2}-${dir_name:4:2}" mv "$dir_name" "$new_name" done
代码说明:
[0-9][0-9][0-9][0-9][0-9][0-9]/:匹配所有6位数字命名的文件夹${dir%/}:移除路径末尾的斜杠,得到纯文件夹名称${dir_name:0:2}:截取前2个字符(年份后两位),后续两个截取分别对应月份和日期
Batch(Windows CMD)批量重命名方案
打开CMD并切换到目标文件夹所在目录,执行以下脚本:
@echo off setlocal enabledelayedexpansion for /d %%d in ([0-9][0-9][0-9][0-9][0-9][0-9]) do ( set "old_name=%%d" set "new_name=20!old_name:~0,2!-!old_name:~2,2!-!old_name:~4,2!" ren "!old_name!" "!new_name!" ) endlocal
代码说明:
setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内变量能动态更新for /d %%d in (...):遍历当前目录下所有6位数字命名的文件夹!old_name:~0,2!:截取变量的前2个字符,后续两个截取分别对应月份和日期ren:执行重命名操作
内容的提问来源于stack exchange,提问作者Amro Almughrabi
相关产品推荐
相关产品推荐

