为什么Windows删除文件时提示拒绝访问
09-12
用Windows的小伙伴们一定遇到过这样的情况,删除文件的时候提示文件访问被拒绝 需要XXX提供的权限才能对此文件进行更改。对一般人来说遇到这种情况首先做的就是鼠标右键--强制删除…… 估计用360或是其他类似软件的同学们不在少数,目测这种方法应该可以删除到这些文件。如果你的右键菜单没有这个选项,也许可以使用其他的一些可以强制删除文件的工具,在此不作介绍
在我看来,这种问题更一般的方法就是更改文件权限,右键文件--属性--安全--编辑。修改文件权限,如果提示无法修改权限,就先修改文件所有者,右键文件--安全--高级--所有者…… 然而当有不止一个这样的文件的时候,这样的操作就不实在了。所以再简单介绍两个工具:takeown 和cacls
takeown 以重新分配文件所有权的方式允许管理员重新获取先前被拒绝访问的文件访问权。
参数:
/S system 指定要连接到的远程系统。
/U [domain/]user 指定用户上下文,命令在此上下文中执行。
/P [password] 指定给定用户上下文的密码。如果省略,提示输入。
/F filename 指定文件名或目录名模式。可以用通配符 "*" 指定模式。允许共享名/文件名。
/A 将所有权给于管理员组,而不是当前用户。
/R 递归: 指示工具运行于指定的目录和子目录里的文件上。
/D prompt 当前用户在一个目录里没有"列出文件夹"权限时,使用默认答案。当在子目录里进行递归 (/R) 操作时会发生这种情况。用有效值 "Y" 获取所有权或用 "N" 跳过。
下面是几个常用的示例
TAKEOWN /F lostfile ::将lostfile所有权给当前用户
TAKEOWN /F directory /R /A ::递归的方式将directory 目录下文件所有权限给管理员组
TAKEOWN /F * ::将当前目录下所有文件所有权给当前用户
TAKEOWN /F %windir%/*.txt
cacls 用来显示或者修改文件的访问控制列表。
参数:
CACLS filename [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C] [/G user:perm]
[/R user […]] [/P user:perm […]] [/D user […]]
filename 显示 ACL.
/T 更改当前目录及其所有子目录中指定文件的 ACL.
/L 对照目标处理符号链接本身
/M 更改装载到目录的卷的 ACL
/S 显示 DACL 的 SDDL 字符串。
/S:SDDL 使用在 SDDL 字符串中指定的 ACL 替换 ACL.(/E、/G、/R、/P 或 /D 无效)。
/E 编辑 ACL 而不替换。
/C 在出现拒绝访问错误时继续。
/G user:perm 赋予指定用户访问权限。
Perm 可以是: R 读取
W 写入
C 更改(写入)
F 完全控制
/R user 撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
/P user:perm 替换指定用户的访问权限。
Perm 可以是: N 无
R 读取
W 写入
C 更改(写入)
F 完全控制
/D user 拒绝指定用户的访问。
在命令中可以使用通配符指定多个文件。
也可以在命令中指定多个用户。
缩写:
CI - 容器继承。ACE 会由目录继承。
OI - 对象继承。ACE 会由文件继承。
IO - 只继承。 ACE 不适用于当前文件/目录。
ID - 已继承。 ACE 从父目录的 ACL 继承。
例如:
cacls filename /E /P Administrators:F 将Administrators对filename的访问权限改为完全控制
cacls * /E /C /P Administrators:F 将Administrators对所有文件访问权限改为完全控制
通过这两个命令就可以批量获取文件的所有权,然后正常删除文件