Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is there any Windows equivalent of Linux's chmod to change the permissions of a file?

share|improve this question

migrated from Feb 8 '10 at 10:32

This question came from our site for professional and enthusiast programmers.

Either cacls, xcacls, or my personal favourite icacls will probably do what you need.

share|improve this answer
I believe icacls is only available on Vista/7. – Hello71 Aug 15 '10 at 16:01

Greg mentions attrib - but attrib isn't anywhere close to chmod - attrib can set Read-only/Hidden attributes of a single file - it doesn't provide fine-grained controls like icacls does.

icacls sets/resets the access control lists, so you can grant/deny rights for individual SIDs & groups. It is fairly complicated though.

Here's an example I have saved in my github gist; it resets the ownership and access control list for all files in a folder and is particularly useful to fix those annoying "You need permissions from .. to perform this action" especially when moving files over from a previous install:

icacls * /reset /t /c /q 

Reset replaces the existing one with the default list.
/t acts recursively on all files, folders & subfolders
/q doesn't display any success messages
/c continues with remaining files even in an error occurs.

You can also do things like backup the existing ACLs & apply them across all. Have a look at ss64 which explains the different options & switches very well.

share|improve this answer
The problem is, I can't do this, for every file there is the message: "Access is denied". Is there no way around this? On a school system that blocks this, but not cmd? – theonlygusti Jan 9 '15 at 9:50
You need admin privileges; the "normal" cmd which you get by hitting [Win]+[R] lacks these. For such special needs I have an "Admin shell" shortcut, with "Execute as administrator" (or similar; I'm on a German Windows system) checked (and with a dark red background colour). – Tobias Mar 18 '15 at 19:40

The attrib command is the closest match for very basic things (read-only, archive flags). Then there is The ACL (access control list) command cacls. Last but not least, since Windows is actually Posix compliant, the unix-like flags do exist. If you install the Cygwin tool set, you will get a chmod. (A little off-topic, since you are looking for an equivalent of a unix command, downloading and installing Cgygwin might be something interesting for you.)

share|improve this answer

There (sadly) can't be an exact equivalent, since Linux und DOS/Windows use attributes for different purposes, and (as Chathuranga said before) the security model is different:

  • In Windows file systems, there are "hidden" (H) and "system" (S) attributes which don't have an equivalent in Linux; there, files are hidden by prepending the name with a dot (.).
  • There is no equivalent to the Windows "archive" (A) attribute, either.
  • There is no equivalent to the "executable" (x) Linux attributes in the DOS/Windows file attributes.
  • There is an equivalent to the Windows "directory" (D) attribute (but it can't be changed anyway).
  • In Linux file systems, every entry is owned by exactly one user and exactly one group, and read/write/execution can be allowed for each of them, and for others. ACLs (like used by Windows) are even more flexible, but more complicated as well, and the commandline syntax is a PITA (in my humble opinion, of course)

The DOS file attribute R (read-only) is the one which might be considered to have an equivalent: this attribute set is roughly like the w attribute for all being missing; but the permission to change this attribute is subject to ACLs.

It might be cool to have a chmod/chown equivalent on Windows, perhaps written in some scripting language, which in turn calls attrib and cacls (or successors), but I don't have one.

share|improve this answer
Good first post! – slm Dec 28 '12 at 19:47
icacls "C:\folder" /grant:r "Domain\Users":(OI)(CI)M /T /C

Works like a charm to change permissions on a folder for domain users. Additional information regarding cacls and icacls.

share|improve this answer
Nice first post! Never heard of icacls. – slm Dec 28 '12 at 19:52

There is nothing called chmod in windows because the security model of Windows is different than Linux. You can use attrib command to change the properties of the objects. (But they are more towards global properties.)

share|improve this answer

I use Windows command takeown.exe to change file permissions to my current logged in user id:

share|improve this answer

yes the permissions are quite different but you match it like this

Best examples

Permission Modes
7       5     5
user,   group,  world,
r+w+x,  r+x,    r+x,
4+2+1, 4+0+1,  4+0+1  = 755

The permission mode is computed by adding up the following values for the user, the file group, and for everyone else. The diagram shows how.

Read 4 - Allowed to read files Write 2 - Allowed to write/modify files eXecute1 - Read/write/delete/modify/directory

7       4      4
user   group  world
r+w+x    r      r
4+2+1  4+0+0  4+0+0  = 744

Example Permission Modes

Mode    Str Perms   Explanation
0477    -r--rwxrwx  owner has read only (4), other and group has rwx (7)
0677    -rw-rwxrwx  owner has rw only(6), other and group has rwx (7)
0444    -r--r--r--  all have read only (4)
0666    -rw-rw-rw-  all have rw only (6)
0400    -r--------  owner has read only(4), group and others have no permission(0)
0600    -rw-------  owner has rw only, group and others have no permission
0470    -r--rwx---  owner has read only, group has rwx, others have no permission
0407    -r-----rwx  owner has read only, other has rwx, group has no permission
0670    -rw-rwx---  owner has rw only, group has rwx, others have no permission
0607    -rw----rwx  owner has rw only, group has no permission and others have rwx
share|improve this answer

You must log in to answer this question.