如何从命令行获取文件所有权?


34

我经常碰到需要拥有所有权的文件。我通常cacls用于更改ntfs权限,但似乎没有所有权。在* nix下,我将运行chown me:me <file>。有等于的窗户chown吗?


太糟糕了,setACL无法与以上脚本一起使用。Win XP,7和8上的错误消息,您需要认真研究才能发现问题所在

Answers:


25

subinacl是Windows sysadmin的强大工具,用于处理与所有权和ACL有关的所有事情。您可以将所有权更改为除您之外的任何人(您不能使用GUI进行此操作)。

subinacl /file test.txt /setowner=domain\foo

这样,您就可以将所需的权限设置为所需的任何用户,而无需成为管理员(我相信takeown.exe要求)。


Windows XP无效我可以下载SUBINACL.exe(Windows 2003资源工具包)并在Windows XP中使用它吗?
Kiquenet '17

你当然可以!那可能就是我从那里得到的。试试这里
crb

26

您正在寻找“ TAKEOWN.EXE”,它是Windows Server 2003中的第一个标准组件,并且我相信以前有一个资源工具包。它在Windows 7以及更新的系统上可用。

takeown /f <some-file-or-folder> /r

/r对指定文件夹的所有子代递归执行操作。与不同subinacl,您必须以尝试拥有所有权的用户身份登录;或者,您可以简单地将所有权分配给“管理员”组。

这是其文档的副本,保留在SS64上

语法TAKEOWN [/ s计算机[/ u [域]用户名[/ p [密码]]]] / f文件名[/ a] [/ r [/ d {Y | N}]]

密钥/ s计算机远程计算机的名称或IP地址(请勿使用反斜杠)。默认=本地计算机。此参数适用于命令中指定的所有文件和文件夹。

/ u [Domain] UserName使用指定的用户帐户的权限运行脚本。默认=系统权限。

/ p [密码] / u参数中指定的用户帐户的密码。

/ f FileName文件名,UNC路径或目录名模式。接受通配符*

/ a将所有权授予Administrators组,而不是当前用户。

/ r对指定目录和子目录中的所有文件执行递归操作。

/ d {Y | N}禁止当前用户在指定目录上没有“列表文件夹”权限时显示的确认提示,而是使用默认值:Y:获得目录的所有权。N:跳过目录。请注意,必须将此选项与/ r选项一起使用。如果未指定/ a参数,则将文件所有权授予当前登录到计算机的用户。

takeown命令不支持使用(?和*)的混合模式。

更改文件/文件夹的所有者后,您可以为文件分配完全权限,然后读取或删除它们。



SS64有更好的文档链接:ss64.com/nt/takeown.html
jpaugh

17

获取文件夹以及其中所有内容的所有权和全部权利:

takeown /F somedir /A /R
icacls somedir /grant:r User:F /T

确保以管理员身份启动命令提示符!

我必须以管理员身份启动命令提示符,它在Windows 8.1中对我有用。由于Windows 8.1笨拙,我不得不搜索“命令”,右键单击“命令提示符”图标。对我来说,以查看“以管理员身份运行”选项。我有一个命令提示符固定在我的任务栏上,但是右键单击它不会显示“以管理员身份运行”选项。

在Windows 10中,右键单击选项应该可以使用“以管理员身份运行”。

外带语法

takeown [/s <Computer> [/u [<Domain>\]<User name> [/p [<Password>]]]] /f <File name> [/a] [/r [/d {Y|N}]]

参考

Icacls语法

icacls <FileName>[/GRANT [: r] <Sid>: <Perm> [...]] [/ Denegar <Sid>: <Perm> [...]] [/Remove [:g|:d]] <Sid> [...]] [/ t] [/ c] [/ l] [/ q] [/ setintegritylevel <Level>: <Policy> [...]]Icacls <Directory>[/ sustituir <SidOld><SidNew>[...]] [/ restore <ACLfile>[/ c] [/ l] [/q]]

icacls参考


1
请注意,icacls会阻塞长路径名。错误消息“找不到文件”有点误导,更糟糕的icalcs放弃了对树的其余部分的处理,而没有任何消息。您可以使用在树中更深的位置创建SUBST卷的技巧来解决此问题。Takeown.exe确实容忍长名称。
安德鲁·丹尼森,2016年

不适用于Windows XP
Kiquenet '17

8

我知道这是一篇老的文章,但是Windows 7和更高版本中内置了一种方法(可能在Windows Vista中,但是我不确定)。从要重置的文件夹中的升级命令提示符下运行以下命令。/t告诉icacls递归执行操作。

icacls .\* /setowner %UserDomain%\%UserName% /t
icacls .\* /reset /t

第一条命令将所有者重置为通过环境变量登录的所有者。当然,可以使用特定名称代替。

然后,第二个命令强制将权限树继承到所有子文件夹和文件。

希望这对以后的人有所帮助。


第一个命令对我来说足够了。
Benoit Blanchon 2015年

6

您可能想看看SetACL,这是权限管理的瑞士军刀。这是一个如何将驱动器C:上所有文件的所有权分配给“管理员”并一次删除所有子对象的继承保护的示例

SetACL.exe -on "C:\\" -ot file -actn setprot
           -op "dacl:np;sacl:nc"
           -rec cont_obj
           -actn setowner -ownr "n:S-1-5-32-544;s:y"

您也可以添加-silent


3

在Windows Server 2003 R2(及更高版本)中,您可以利用内置工具icacls.exe来从命令行更改所有权,以及扩展它所基于的所有传统cacls.exe操作...

请注意,icacls.exe默认为“编辑”模式,而cacls.exe默认为“替换”模式-对我们中那些被cacls细微差别咬伤(不止一次)的人来说,这是一个可喜的变化!


icacls很好,因为它包含在最新版本的Windows中,并允许将所有权分配给任何用户。
大卫


1

另一个选择是fileacl, 它很小,可以设置/取消设置对象的“继承/不继承”标志,这与大多数Windows utils不同。



0
  1. 以管理员用户身份打开命令提示符并更改为有问题的目录
  2. 获取那里所有文件的所有权...例如: takeown /f *.jpg
  3. 向您选择的用户授予访问权限...示例:(icacls *.jpg /grant "Everyone":F请注意,在非英语Windows中,“每个人”可能都不存在,例如,在德语Windows中,它仅与“杰德”一起使用-Windows会翻译命令选项的确如此!)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.