![使用 XCACLS 设置长文件名的权限](https://linux22.com/image/482184/%E4%BD%BF%E7%94%A8%20XCACLS%20%E8%AE%BE%E7%BD%AE%E9%95%BF%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E6%9D%83%E9%99%90.png)
我们需要在 Windows 2000 Server 上设置用户目录的权限。这种情况经常发生,并且还必须按照以下顺序设置权限,否则备份将失败。这是基本脚本:
XCACLS foldername /g Administrators:OF /T /C /Y
XCACLS foldername /E /g "DOM\Enterprise Admins":OF /T /C /Y
XCACLS foldername /E /g SYSTEM:OF /T /C /Y
XCACLS foldername /E /g STAFF\username:ORWEDC /T /C /Y
我的问题是这个脚本无法处理某些目录中的所有文件。它似乎无法处理的文件是长文件名和深层嵌套的目录。
是否有人知道一个脚本,它不介意长文件名并且可以顺利处理大路径?
我遇到过 Microsoft 的 XCACLS.vbs 脚本,但是它的工作方式不同,而且我不确定它是否也适用于这些大文件名。
答案1
文件名的长度限制为 260 个字符左右,但是有一种非常狡猾和隐秘的方法可以解决这个问题 :-)
限制在 Win32 子系统中,而不是在内核中。如果在文件名前加上 \?\,这会导致 Win32 子系统直接将名称传递给内核,而不进行任何预处理,并且该限制不适用。内核仍然有限制,但它是 65,553 个字符之类的愚蠢限制。
因此:
xcacls C:\verylongname.txt
不起作用你应该发现:
xcacls \\?\C:\verylongname.txt
确实有效。如果您使用 UNC 名称,则语法为:
xcacls \\?\UNC\server\share\verylongname.txt
注意:这仅适用于完全限定名称,即以驱动器号开头的名称。它不适用于 Windows 中的所有命令行应用程序,但适用于许多命令行应用程序。