38

Every so often I run into a file that I need to take ownership of. I normally use cacls for changing ntfs permissions, but it doesn't seem to do ownership. Under *nix I would run something like chown me:me <file>. Is there a windows equivalent to chown?

1
  • too bad setACL isn't working with the script above. errormessages on Win XP, 7 and 8 and you need to be a proffesor to find what's wrong with it
    – user176031
    May 31, 2013 at 12:40

11 Answers 11

25

subinacl is a Windows sysadmin's power tool for doing everything to do with ownership and ACLs. You can change the ownership to anyone other than just you (you can't do this with the GUI).

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

This lets you set the permission to any user you like, without having to be an administrator (as I believe takeown.exe requires).

2
  • Not valid for windows xp Can I download SUBINACL.exe (Windows 2003 Resource kit) and use it in Windows XP ?
    – Kiquenet
    Feb 23, 2017 at 19:28
  • Sure you can! That's probably where I got it from. Try here.
    – crb
    Feb 24, 2017 at 21:18
31

You're looking for "TAKEOWN.EXE", which was first in Windows Server 2003 as a standard component, and I believe a resource-kit item prior. It is available on Windows 7, and perhaps newer systems.

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

/r performs the operation recursively on all children of the specified folder. Unlike subinacl, you must log in as the user you are trying to take ownership with; or, you can simply assign ownership to the "Administrators" group.

Here's a copy of its documentation, as preserved on SS64:

Syntax TAKEOWN [/s Computer [/u [Domain]UserName [/p [Password]]]] /f FileName [/a] [/r [/d {Y|N}]]

Key /s Computer The name or IP address of a remote computer (do not use backslashes). default = local computer. This parameter applies to all of the files and folders specified in the command.

/u [Domain]UserName Run the script with the permissions of the specified user account. default = system permissions.

/p [Password] The password of the user account that is specified in the /u parameter.

/f FileName The file name, UNC path or directory name pattern. Accepts the wildcard character *

/a Give ownership to the Administrators group instead of the current user.

/r Perform a recursive operation on all files in the specified directory and subdirectories.

/d {Y | N} Suppress the confirmation prompt that is displayed when the current user does not have the "List Folder" permission on a specified directory, and instead use a default value: Y: Take ownership of the directory. N: Skip the directory. Note that you must use this option in conjunction with the /r option. If the /a parameter is not specified, file ownership is given to the user who is currently logged on to the computer.

Mixed patterns using (? and *) are not supported by the takeown command.

After changing the owner for a file/folder, you can then assign full permissions to the files and subsequently read or delete them.

2
19

Take ownership and full rights of folder and everything inside:

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

Make sure to start the Command Prompt as Administrator!

I had to start a Command Prompt as Administrator, it worked for me in Windows 8.1. With Windows 8.1 awkwardness, I had to search for "command", right click on the Command Prompt icon. For me in order to see the "Run as Administrator" option. I had a Command Prompt pinned to my Taskbar, but right clicking on it would not show the "run as Administrator" option.

In Windows 10, "Run as Administrator" should be available to you as a right click option.

Takeown Syntax:

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

takeown Reference.

Icacls Syntax:

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 Reference.

2
  • 1
    Be aware that icacls chokes on long path names. The error message "file not found" is a bit misleading, worse icalcs aborts processing the rest of the tree with no message. You can use the trick of creating a SUBST volume deeper in the tree to work around this sometimes. Takeown.exe does tolerate long names. Nov 1, 2016 at 19:45
  • Not valid for Windows XP
    – Kiquenet
    Feb 23, 2017 at 19:25
10

I know this is a really old post, but there is a way built into Windows 7 and newer (may be in Windows Vista, but I am not sure). Run the following from an escalated command prompt in the folder that you want reset. /t tells icacls to perform the operation recursively.

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

The first command resets the owner to who ever is logged on via the environment variables. Of course, a specific name can be used instead.

The second command then forces the permissions to be reinherited down the tree to all of the child folders and files.

Hope this helps someone in the future.

1
  • The first command was enough for me. Dec 22, 2015 at 11:08
6

You might want to take a look at SetACL, the swiss army knife of permission management. Here is an example of how to assign ownership of all files on drive C: to "Administrators" and remove protection of inheritance from all child objects in one go:

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"

You can also add -silent.

3

In Windows Server 2003 R2 (and later) you can take advantage of the built-in tool icacls.exe to change ownership from the command line, as well as all of the traditional cacls.exe manipulations upon which it expands...

Note that icacls.exe defaults to "edit" mode, while cacls.exe defaults to "replace" mode--a welcome change to those of us bitten (more than once) by that little nuance of cacls!

1
  • icacls is nice because it is included in recent versions of windows and allows assigning ownership to any user.
    – David
    Aug 27, 2014 at 17:03
3

For Windows 2003, 2008 or Vista or 7 use Takeown.

For Windows 2000 use Fileowners.pl.

1
1

Another alternative is fileacl It is small and can set/unset "inherit/don't inherit" flag on the object, unlike most windows utils.

0

I've found a solution using Windows Tools: cacls

cacls <file or directory> /E /T /G <user>:F
0
  1. open command prompt as admin user and change to problematic directory
  2. take ownership of all files there ... example: takeown /f *.jpg
  3. grant access rights to users of your choice ... example: icacls *.jpg /grant "Everyone":F (note that in non-english Windows "Everyone" might not exist, e.g. in german Windows it only works with "Jeder" - real bummer that Windows translates command options!)
0

You can also use ownerly. Requires Admin privileges and uses the SeRestorePrivilege privilege and therefore may work in some cases where some of the other mentioned tools (which often use the lower privilege SeTakeOwnershipPrivilege) might fail.

ownerly.exe c:\file.txt -d . -u Administrator (local user "Administrator")
ownerly.exe c:\file.txt -u mydomain\john.doe (domain user)
ownerly.exe c:\file.txt -u "[email protected]" (domain user)
ownerly.exe c:\file.txt -u "NT AUTHORITY\Authenticated Users" (well known group)
ownerly.exe c:\file.txt -d . -u "my-local-group" (local group)
ownerly.exe c:\file.txt -u "BUILTIN\Administrators" (local Administrators group on Windows installed in English)
ownerly.exe c:\file.txt -u "BUILTIN\Administratoren" (local Administrators group on Windows installed in German)

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .