如何将文件修改日期时间戳添加到文件名并实现批量重命名?
批量为文件夹内文件追加修改时间戳的重命名方法
匹配需求规则
- 操作范围:仅处理当前目标文件夹下的文件,不递归改动子文件夹内的内容
- 命名规则:保留原文件主名、原文件扩展名,在主名和扩展名之间插入对应文件的最后修改时间戳
- 时间戳格式:按2位日、2位月、4位年、2位时、2位分的顺序连续拼接
对应示例:原文件
James.txt,修改时间为2020年3月19日11:11
重命名后效果:James_190320201111.txt
(注:原需求示例省略了文件后缀,实际操作必须保留原扩展名,否则会导致文件无法被系统识别打开)
各系统可直接复用的操作命令
Windows 系统(PowerShell 环境)
打开目标文件夹,在文件夹地址栏直接输入powershell回车,即可打开路径匹配的PowerShell操作窗口:
- 先跑预览命令确认重命名效果,避免误操作:
Get-ChildItem -File | Rename-Item -NewName { $_.BaseName + "_" + $_.LastWriteTime.ToString("ddMMyyyyHHmm") + $_.Extension } -WhatIf - 预览结果完全符合预期后,去掉命令末尾的
-WhatIf参数,执行正式重命名:Get-ChildItem -File | Rename-Item -NewName { $_.BaseName + "_" + $_.LastWriteTime.ToString("ddMMyyyyHHmm") + $_.Extension }
macOS / Linux 系统(Bash 环境)
打开终端,切换到需要批量处理的目标文件夹路径,直接执行以下命令即可:
find . -maxdepth 1 -type f -exec sh -c ' for file; do # 跳过已经加过时间戳的文件,避免重复处理 [[ "$(basename "$file")" =~ _[0-9]{12}\. ]] && continue filename=$(basename "$file") main_name="${filename%.*}" file_ext="${filename##*.}" # 自动兼容macOS、Linux系统的stat命令参数差异 mod_time=$(stat -f "%d%m%Y%H%M" "$file" 2>/dev/null || stat -c "%d%m%Y%H%M" "$file") mv -n "$file" "${main_name}_${mod_time}.${file_ext}" done ' sh {} +
命令自带两层安全逻辑:一是跳过已加时间戳的文件,重复执行也不会叠加多余后缀;二是启用
mv -n参数,遇到同名文件不会强制覆盖,避免数据丢失。
内容的提问来源于stack exchange,提问作者johnyk105
相关产品推荐
相关产品推荐

