怎么批量修改文件属性

系统问题

“文件属性”这四个字在 Windows 里是个大筐,装了好几层东西:右键属性里那几个小勾选框、创建时间修改时间、NTFS 权限里谁能读谁能写、还有文件归属谁。想批量修改文件属性,第一步不是找工具,而是先确认自己要动的是哪一层——拿改时间戳的命令去改权限,折腾一晚上也不会有结果。

你要改的到底是哪一层属性

想改的东西 在哪儿看 主要工具
只读、隐藏、存档、系统 右键属性 → 常规 资源管理器多选、attrib
创建时间、修改时间、访问时间 右键属性 → 常规 PowerShell、第三方小工具
读写执行权限 右键属性 → 安全 icacls
文件拥有者 安全 → 高级 → 所有者 takeown

下面按“文件数量从少到多、需求从简单到复杂”的顺序往下走,对号入座就行。

几十个文件,鼠标多选一次改完

数量不多的时候真没必要开命令行。在资源管理器里按住 Ctrl 逐个点,或者按住 Shift 圈选一整段,选完在选中区域上右键点“属性”。Windows 会弹出一个合并的属性窗口,里面只读、隐藏那两个复选框是“三方状态”——实心方块代表这批文件里有勾的有没勾的。你在方块状态上点一下,就统一给所有选中文件加上了;再点一下变成空,就是统一去掉。

  1. 按住 Ctrl 或 Shift 选中一批文件
  2. 右键 → 属性
  3. 在“常规”选项卡里点只读或隐藏的复选框
  4. 点“确定”,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 一行就搞定了,那一晚的咖啡白喝了。工具选对,这类活真就是几分钟的事。

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