怎么修改文件创建日期

系统问题

改文件创建日期这事,难点不在操作本身。真正磨人的是不同系统对「创建时间」的支持程度差得太远——Windows 一条命令就能搞定,macOS 要装个命令行小工具,Linux 基本没有正规入口,手机上更是碰不到。

先看看你手上是什么情况,再对号入座。

先弄清楚你要改的到底是哪个时间

文件身上一般带着三个时间戳(Time Stamp,指文件被创建、修改、读取时各自记录的时间点):创建时间、修改时间、访问时间。右键 → 属性,这三项一次性都能看到。

如果目标只是修改时间,那事情简单,随便一个工具都能动,连属性面板里都点得动。真正难搞的是创建时间。另外还有一类需求其实是改照片的拍摄日期,那个藏在 EXIF(Exchangeable Image File Format,图片里记录拍摄参数和时间的元数据)里,跟文件系统记的时间完全是两码事,放到后面单独讲。

属性面板为什么偏偏改不了创建时间

丑话说在前头:Windows 资源管理器的属性对话框里,「修改时间」和「访问时间」点一下就进入编辑状态,「创建时间」那一栏是灰的,怎么点都没反应。这不是权限问题,是系统压根没开放这个口子。

Windows 文件「属性」对话框常规页面

想动它,只能绕到命令行或者第三方工具上去。

PowerShell 一条命令改创建时间

这个办法最直接。按 Win+R 敲 powershell 回车,把下面命令里的路径换成你自己的:

(Get-Item "C:\test\a.txt").CreationTime = "2026-09-13 09:30:00"

PowerShell 先用 Get-Item 拿到文件对象,再给它的 CreationTime 属性赋值。赋值成功,新时间就落进文件系统了。时间是本地时区,格式写成「年-月-日 时:分:秒」最不容易出错。

PowerShell 窗口中执行设置 CreationTime 的命令

普通用户权限就够,不用管理员。要是文件正被别的程序独占打开,偶尔会报错,把那个程序关掉再试一次。

顺手也能把创建时间对齐到修改时间,省得两个日期对不上:

Get-ChildItem "D:\Docs" -File | ForEach-Object { $_.CreationTime = $_.LastWriteTime }

一堆文件要一起改怎么办

单个文件一条命令够了,几十上百个的话,加个循环更省事:

Get-ChildItem "D:\Photos\*.jpg" | ForEach-Object { $_.CreationTime = "2026-01-01 12:00:00" }

这条会把 D:\Photos 下所有 jpg 的创建时间统一改成同一个值,批量修改文件创建日期就是这么干。想让每个文件的时间各不相同,得从文件名或别的字段里解析,那就属于更细的活,下面这个工具能直接按文件名里的日期串来填。

图形界面党:BulkFileChanger 更省事

NirSoft 出的 BulkFileChanger 免费、免安装,主界面就是个文件列表。把文件拖进去,选中后走菜单里的 Action → Change Time/Attributes,能分别设定创建、修改、访问三个时间,也可以参照另一个文件,或者从文件名里算式取值。反复调一批文件的创建日期,比敲命令直观得多。

同类的还有 Attribute Changer,装完之后右键菜单里直接多一项,改起来更快。

macOS 改创建时间得请出 SetFile

Mac 上 touch 命令改不了创建时间,它只动修改时间和访问时间。要碰 birth time(文件在文件系统里的诞生时间,也就是 Finder 显示的创建日期),得用 SetFile:

SetFile -d "05/01/2026 09:30:00" ~/Desktop/a.txt

SetFile 属于 Xcode 命令行工具,没装过就先在终端里跑一次 xcode-select --install。日期格式是「月/日/年 时:分:秒」,跟 Windows 反着来,这里最容易填错。-d 改创建时间,-m 改修改时间,用 GetFileInfo ~/Desktop/a.txt 可以查当前值。

Finder 的「显示简介」窗口里同样只能看不能改,别在那儿找半天。

Linux 上的创建时间基本是只读的

ext4 文件系统确实记了 crtime,stat 文件名 的输出里能看到 Birth 那一行。麻烦在于用户空间没有标准命令去改它。

touch 能改的就是 atime 和 mtime:

touch -t 202605010930.00 a.txt

时间格式是「年月日时分.秒」,-a 只改访问时间,-m 只改修改时间,都不加就同时改。想动 crtime,只能用 debugfs 直接写 inode(文件系统里描述一个文件的那条记录):先用 ls -i 查出 inode 号,再进 debugfs -w /dev/sda1,执行 set_inode_field 123456 crtime 202605010930

这类操作直接作用于块设备,要 root,分区最好处于卸载状态,写错 inode 有可能把文件写坏。实际工作里更常见的做法是复制一份出来,新文件的创建时间自然就是当下这一刻。

手机和照片里那个日期,改的不是文件属性

安卓不 root 就没法改文件的创建时间,任何 App 都办不到。相册里显示的日期来自 MediaStore(安卓系统维护的媒体数据库)里记录的拍摄时间和入库时间,改它只影响相册的排序和分组。

iPhone 上也一样。照片 App 里的「调整日期与时间」改的是 EXIF 中的原始拍摄时间,文件本身的创建时间纹丝不动。要批量处理照片的拍摄信息,ExifTool 这关绕不过去,Windows 和 Mac 都能跑。

改完怎么确认真的生效了

Windows 里再敲一遍 (Get-Item "C:\test\a.txt").CreationTime,返回的就是当前值;懒得敲命令就右键属性看那一栏。Linux 用 stat 看 Birth 行,macOS 用 GetFileInfo

系统 创建时间能否修改 可用手段 主要限制
Windows 可以 PowerShell、BulkFileChanger 属性面板只读,需绕开图形界面
macOS 可以 SetFile -d 需装 Xcode 命令行工具,日期按美式格式填
Linux (ext4) 基本不行 touch 只能改 mtime / atime crtime 需 debugfs 裸操作,风险高
Android 不 root 不行 相册日期改的是媒体库记录
iOS 不行 照片 App 改 EXIF 只影响拍摄时间显示

最后有个心理准备:复制、解压、走网盘同步之后,创建时间经常会重置成操作发生的那一刻。文件先放到最终位置再改,别改完又挪来挪去,白忙一场。

操作系统种类多样、版本繁杂,本文内容可能无法完全匹配你的具体环境,不保证完全正确或普遍适用,仅供操作参考。