怎么批量修改文件属性
“文件属性”这四个字在 Windows 里是个大筐,装了好几层东西:右键属性里那几个小勾选框、创建时间修改时间、NTFS 权限里谁能读谁能写、还有文件归属谁。想批量修改文件属性,第一步不是找工具,而是先确认自己要动的是哪一层——拿改时间戳的命令去改权限,折腾一晚上也不会有结果。
你要改的到底是哪一层属性
| 想改的东西 | 在哪儿看 | 主要工具 |
|---|---|---|
| 只读、隐藏、存档、系统 | 右键属性 → 常规 | 资源管理器多选、attrib |
| 创建时间、修改时间、访问时间 | 右键属性 → 常规 | PowerShell、第三方小工具 |
| 读写执行权限 | 右键属性 → 安全 | icacls |
| 文件拥有者 | 安全 → 高级 → 所有者 | takeown |
下面按“文件数量从少到多、需求从简单到复杂”的顺序往下走,对号入座就行。
几十个文件,鼠标多选一次改完
数量不多的时候真没必要开命令行。在资源管理器里按住 Ctrl 逐个点,或者按住 Shift 圈选一整段,选完在选中区域上右键点“属性”。Windows 会弹出一个合并的属性窗口,里面只读、隐藏那两个复选框是“三方状态”——实心方块代表这批文件里有勾的有没勾的。你在方块状态上点一下,就统一给所有选中文件加上了;再点一下变成空,就是统一去掉。
- 按住 Ctrl 或 Shift 选中一批文件
- 右键 → 属性
- 在“常规”选项卡里点只读或隐藏的复选框
- 点“确定”,Windows 会问是否应用到所有项目,选“是”
Windows 11 的右键菜单要先点“显示更多选项”才能看到老版属性对话框,别以为菜单里少了什么。另外这一步只对当前选中的文件生效,不含子文件夹里的内容,想连子目录一起改,只能往下看命令行的做法。

上千个文件,attrib 命令几秒解决
attrib 是 Windows 自带的老命令,从 XP 时代活到今天。它的语法很短:字母前加 + 是设置,加 - 是清除,后面跟路径。
| 参数 | 作用 |
|---|---|
| +R / -R | 加上 / 去掉只读 |
| +H / -H | 加上 / 去掉隐藏 |
| +S / -S | 加上 / 去掉系统属性 |
| +A / -A | 加上 / 去掉存档属性 |
| /S | 递归处理子目录里的文件 |
| /D | 连文件夹本身一起处理 |
几个常用组合:
attrib +r "D:\资料\*.txt" 给该目录所有 txt 加只读
attrib -h -s D:\文件夹\*.* /S /D 递归清掉隐藏和系统属性,文件夹也算
attrib D:\某个文件.doc 只查不改,看看它现在挂了哪些属性
通配符支持 * 和 ?,比如 *.jpg、2026??.log。执行前强烈建议先单独跑一次不带 + - 的查询,确认匹配范围跟你想的一致,再加参数执行。attrib 改属性不需要管理员权限,只要那个文件是你自己的。我这台老机子上处理一个上万文件、嵌套五六层的目录,带 /S /D 也就十几秒的事。
要按条件挑着改,用 PowerShell 更顺手
attrib 只能按名字和扩展名匹配,碰上有条件的筛选就费力了:改三天前创建的所有文件、只改大于 10MB 的视频、跳过某个子目录——这些交给 PowerShell。
批量加只读或清只读
Get-ChildItem "D:\test" -Recurse -File | ForEach-Object { $_.IsReadOnly = $true }
想反过来就写 $false。IsReadOnly 是 .NET 层面的属性,比循环调用外部 attrib 命令快不少,因为省掉了每次启动进程的开销。
批量改隐藏属性
$item = Get-Item "D:\a.txt"
$item.Attributes = $item.Attributes -bor [System.IO.FileAttributes]::Hidden
-bor 是按位或,意思是“在原有属性基础上再加一个隐藏”,不会把文件本来有的只读、存档属性冲掉。要取消就用 -band -bnot 组合。
批量统一时间戳
Get-ChildItem "D:\test" -Recurse -File | ForEach-Object { $_.LastWriteTime = "2026-01-01 10:00:00" }
把 LastWriteTime 换成 CreationTime 就改创建时间。改时间戳这件事有个隐形副作用:不少备份软件、编译系统、同步工具都靠时间戳判断文件有没有变过,全刷成同一个时间,增量备份可能直接失效,或者重新编译整个工程。改之前心里得有数。
文件夹权限的批量修改交给 icacls
右键属性里的“安全”选项卡其实也能多选后改权限,但只对这一个文件夹生效,子目录不动。真正一次改整棵树的是 icacls。
icacls "D:\共享" /grant Users:(OI)(CI)M /T
| 片段 | 含义 |
|---|---|
| /grant | 授予权限(对应 /deny 是拒绝、/remove 是移除) |
| Users | 目标账户或组名 |
| (OI) | 对象继承,子文件继承这条权限 |
| (CI) | 容器继承,子文件夹继承这条权限 |
| M | 权限级别,M 是修改,F 是完全控制,R 是只读 |
| /T | 递归到所有子目录和文件 |
(OI)(CI) 这一对千万别漏,漏了就只有这个文件夹本身有权限,里面的文件一个都不继承,表现出来就是“明明授权了却还是打不开”。
如果是接手别人的硬盘、文件夹所有者已经不是你,先接管再授权:takeown /f "D:\共享" /r /d y 把所有权抢过来,然后才能跑上面的 icacls。
几个踩了才知道的坑
- 只读对文件夹基本没有实际约束力。给文件夹加只读,你照样能往里面拖文件,它更多是个标记位。别指望靠它保护目录。
- 加了系统属性(+S)之后,文件在资源管理器里会彻底消失,连勾选“显示隐藏文件”都看不到,得单独去关掉“隐藏受保护的操作系统文件”。手别抖。
- 隐藏不等于看不见。资源管理器“查看”里勾上“隐藏的项目”,加 H 的文件照样露出来,它防的是误删和视觉干扰,不是加密。
- U 盘是 FAT32 或 exFAT 格式的话,压根没有 NTFS 权限那一层,icacls 会直接报错。属性勾选框和时间戳倒是不受影响。
- 批量操作前先拿一个小文件夹试一遍,命令里的
+写成-这种失误太常见了,撤销起来很麻烦。
实在不想碰命令行的,NirSoft 出的 BulkFileChanger 是个免费的图形工具,能一次性给一批文件改时间戳和属性,拖进去列表里批量勾选,前前后后试了不少同类小工具,这个算是比较干净的一个。就是这个软件界面停留在上个年代,第一次打开会有点懵。
Linux 和 macOS 上的对应做法
这两套系统在图形界面里都没提供多选批量改属性的功能,终端命令是唯一的正路。
Linux 上改权限用 chmod -R 755 /path,改归属用 chown -R user:group /path,改时间戳用 touch -d "2026-01-01 10:00:00" file.txt。隐藏文件不靠属性位,而是文件名前面加个点,想批量改只能靠mv重命名。
macOS 的终端命令和 Linux 基本一样,chmod、chown、touch 都通用。Finder 里多选后右键“显示简介”会给每个文件弹一个独立窗口,不是合并成一个,改起来反而更慢。
想当年我为了给一批素材统一时间戳,写了个循环一条条改,跑完才发现 PowerShell 一行就搞定了,那一晚的咖啡白喝了。工具选对,这类活真就是几分钟的事。