不知何故,我意外地将子文件夹中的所有文件设置为“无所有者”,而且我似乎无法更改所有权限。我可以通过更改所有者然后设置权限来手动更改一个文件,但是如何才能一次更改此目录中所有文件的所有者呢?
答案1
使用takeown
从命令提示符中递归地获取文件夹、其所有子文件夹和文件的所有权:
takeown /f "c:\folder\subfolder" /r
这很有效,但如果您不以管理员身份运行命令行控制台,它可能会因您不拥有的文件而失败。
答案2
要修复真正损坏的权限,最好的方法是依次运行这两个命令:
takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T
第一个选项将授予您所有文件的所有权,但这可能还不够,例如,如果所有文件的读/写/执行权限都设置为“拒绝”。您拥有这些文件,但仍然无法对它们执行任何操作。
在这种情况下,运行第二个命令,它将修复损坏的权限。
答案3
请注意,cacls 已弃用(自 Windows Vista 以来?)并建议您使用icacls
。
此命令将递归重置文件夹的权限:
icacls "C:\path\to\folder" /reset /T
答案4
我遇到了路径很长(超过 256 个字符)的文件问题。这两个命令
takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T
除了这些路径和名称很长的文件外,其他文件都正常工作。我最终重命名了
"C:\path\to\really_long_folder_name"
到
"C:\path\to\r"
然后运行
takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q
之后,我可以将文件夹重命名为更合理的名称。takeown 的 /DY 对提示回答“是”。对于 icacls,我使用 /grant 授予所有人完全访问权限(因为我只是想从死机的 PC 访问硬盘上的数据),使用 /t 处理子文件夹和文件,使用 /q 以安静模式运行(隐藏成功),使用 /c 显示错误。我重复该过程,重命名文件夹,直到所有文件权限都成功更新。
希望这可以帮助那些遇到类似错误的人,例如我在尝试访问旧硬盘中的数据时遇到的“无法枚举容器中的对象,访问被拒绝”错误。