Windows镜像备份文件夹无法压缩,修改权限时枚举对象失败求助
解决Windows镜像文件夹批量权限修改问题
我之前处理系统镜像备份的时候也碰到过完全一样的权限问题——手动批量改权限时弹出“无法枚举容器中的对象”,只能一个个改,效率低到爆炸。下面几个方法都是我亲测有效的,从命令行到PowerShell,总有一个能解决:
方法1:用命令行工具快速夺取所有权+重置权限
这是最快捷的方式,一定要用管理员身份打开命令提示符(右键开始菜单,选“Windows终端(管理员)”或者“命令提示符(管理员)”):
- 先夺取整个文件夹及所有子文件/文件夹的所有权:
takeown /f "你的镜像文件夹完整路径" /r /d y
/f:指定要处理的文件夹路径(路径带空格的话必须用双引号括起来)/r:递归处理所有子对象/d y:遇到权限提示时默认选“是”,不用手动确认
- 接着给所有用户设置完全控制权限:
icacls "你的镜像文件夹完整路径" /grant everyone:F /t /c
/grant everyone:F:给Everyone组分配完全控制权限/t:递归处理所有子文件夹和文件/c:忽略错误继续执行(个别系统受保护文件改不了不影响整体压缩)
方法2:PowerShell灵活定制权限设置
如果你更习惯用PowerShell,同样以管理员身份打开:
- 先获取目标文件夹对象并夺取所有权:
# 替换成你的镜像文件夹路径 $folderPath = "C:\Backup\SystemImage" $folder = Get-Item $folderPath # 获取当前权限对象,设置你自己为所有者 $acl = $folder.GetAccessControl('Access') $owner = New-Object System.Security.Principal.NTAccount($env:USERNAME) $acl.SetOwner($owner) Set-Acl -Path $folder.FullName -AclObject $acl
- 递归给所有子文件/文件夹添加完全控制权限:
Get-ChildItem $folderPath -Recurse | ForEach-Object { $itemAcl = $_.GetAccessControl('Access') # 创建完全控制权限规则 $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( "Everyone", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" ) $itemAcl.AddAccessRule($accessRule) Set-Acl -Path $_.FullName -AclObject $itemAcl }
方法3:安全模式下操作(解决文件占用问题)
如果上面的命令还是报错,大概率是系统里有进程在占用镜像文件。这时候重启电脑进入安全模式(重启时按住Shift点重启,选“疑难解答”→“高级选项”→“启动设置”→“重启”后选4或5),再执行方法1的命令就行——安全模式下加载的服务最少,不会有程序占用这些备份文件。
注意事项
- 所有操作必须以管理员身份执行,普通权限根本改不了系统镜像的权限
- 如果路径里有空格,一定要用双引号把路径括起来
- 个别系统受保护的文件可能还是无法修改权限,但这类文件占比极低,不会影响你压缩整个文件夹
内容的提问来源于stack exchange,提问作者user135711
相关产品推荐
相关产品推荐

