要实现“只允许修改、不允许删除”,必须显式拒绝删除权限,因为ntfs中“修改”包含删除能力;需组合“读取和执行、列出内容、读取、写入”允许项,并叠加“拒绝-删除”及“拒绝-删除子文件夹及文件”,且拒绝权限优先级最高。
要实现“只允许修改、不允许删除”,关键不是单纯勾选“修改”权限,而是必须显式拒绝删除相关权限。因为windows中“修改”权限本身已包含“删除”能力,直接给“修改”等于同时开放了删除——这与目标冲突。真正可行的做法是:用“写入+读取和执行”等基础允许项组合,再叠加对删除动作的明确拒绝,且拒绝权限优先级最高。
核心原理:拒绝权限覆盖允许
NTFS权限遵循“拒绝最大”原则:只要某用户/组被赋予了任何一项“拒绝-删除”或“拒绝-删除子文件夹及文件”,无论其他地方是否给了“修改”或“完全控制”,该用户都无法执行删除操作。这是实现“可改不可删”的技术基础。
手动设置步骤(推荐用于单个文件夹)
1. 确保目标文件夹位于NTFS分区(U盘需先格式化为NTFS)
2. 右键文件夹 → 属性 → 安全 → 编辑 → 添加目标用户或组
3. 勾选允许:读取和执行、列出文件夹内容、读取、写入
4. 点击“高级”→ 选中刚添加的用户 → “编辑”→ 勾选:拒绝-删除、拒绝-删除子文件夹及文件
5. “应用于”选择:此文件夹、子文件夹和文件 → 确定保存
PowerShell批量配置(适合多目录或自动化)
以下脚本为指定用户设置“可写入但不可删除”:
$acl = Get-Acl "D:\SharedFolder"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMAIN\UserName",
"ReadAndExecute, ListDirectory, Read, Write",
"ContainerInherit, ObjectInherit",
"None",
"Allow"
)
$denyRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"DOMAIN\UserName",
"Delete, DeleteSubdirectoriesAndFiles",
"ContainerInherit, ObjectInherit",
"None",
"Deny"
)
$acl.SetAccessRule($rule)
$acl.SetAccessRule($denyRule)
Set-Acl "D:\SharedFolder" $acl
注意事项与常见问题
• 若“安全”选项卡不可见,请确认U盘或硬盘是NTFS格式(FAT32/exFAT不支持)
• 操作前建议先禁用继承(高级设置里点击“禁用继承”→“从此对象中删除所有已继承的权限”),避免上级权限干扰
• 用户若同时属于多个组,任一组设了“拒绝删除”,即生效
• 修改后需刷新资源管理器或重启文件资源管理器(可通过任务管理器结束explorer.exe再重启)才能立即体现效果











