How to remove read-only attribute recursively on Windows

208,486

Solution 1

I would use the ATTRIB command, for example:

attrib -r c:\folder\*.* /s

attrib is the command
-r is the flag for removing read-only attributes
c:\folder\*.* is the folder you are running it on, plus wildcards for all files
/s is the flag for doing all sub directories and files

Here is some more documentation and examples for the attrib command: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/attrib

Solution 2

First, open up a command prompt. Then cd into the directory where you want to start applying the attribute changes. Finally, enter the following command:

 attrib -R /S

That will remove the read-only attribute from all files in the current directory, then it will recurse down to do the same thing in all the subdirectories.

Solution 3

Note: Most of the other answers are using only -r which might not work on files which have system or hidden attributes set.

So here is a solution for recursively removing read-only attribute from all the files (including those which are system or hidden) inside a directory:

attrib -s -h -r "c:\path_to_folder\*.*" /s /d

Description:
-s Remove system attribute
-h Remove hidden attribute
-r Remove read-only attribute
/s Set/remove attributes in current folder and including subfolders
/d Set/remove attributes of folders too

Solution 4

I created this batch file to do this. Basically this batch file will clear read only attributes in the directory its in or the directory its in and all lower directories. Hope someone finds a use for it. Excuse any code that may seem "poor" as I am just starting to learn batch files myself.

@ECHO off
:begin
ECHO Would you like to only remove read only attributes
ECHO from this director or from all the sub directores as
ECHO well?
ECHO.
ECHO [A] This directory only
ECHO [B] All directories - cascading
ECHO [C] Cancel
SET /P actionChoice="Option(A,B,C): "
ECHO.
IF "%actionChoice%" == "A" GOTO A
IF "%actionChoice%" == "B" GOTO B
IF "%actionChoice%" == "C" GOTO C
GOTO badChoice

:A
CLS
ECHO Are you sure you want to remove all read-only
ECHO attributes from this directory only?
ECHO.
ECHO Directory:
ECHO.
ECHO %CD%
ECHO.
SET /P continueChoice="Continue? (Y, N): "
IF "%continueChoice%" == "N" GOTO abort
ECHO Removing Read Only Attributes From Local Directory...
SET currectDirectory=%CD%
ECHO Current directory is: %currectDirectory%
FOR %%G IN (%currectDirectory%\*) DO (
ECHO %%G
ATTRIB -R "%%G"
)
GOTO end

:B
CLS
ECHO Are you sure you want to remove all read-only
ECHO attributes from this directory and all sub-directories?
ECHO.
ECHO Directory:
ECHO.
ECHO %CD%
ECHO.
SET /P continueChoice="Continue? (Y, N): "
IF "%continueChoice%" == "N" GOTO abort
ECHO Removing Read Only Attributes Cascading...
FOR /R %%f IN (*) DO (
ECHO %%f
ATTRIB -R "%%f"
)
GOTO end

:C
CLS
ECHO Cancel: no files have been changed
GOTO end

:badChoice
CLS
ECHO Unknown Option
ECHO.
ECHO.
ECHO.
GOTO begin

:abort
CLS
ECHO No files have been changed
ECHO.
ECHO.
ECHO.
GOTO begin

:end
ECHO Read only attributes removed
PAUSE
Share:
208,486

Related videos on Youtube

Mert Nuhoglu
Author by

Mert Nuhoglu

Software developer and data scientist. Working in btgrubu.com / layermark.com

Updated on September 18, 2022

Comments

  • Mert Nuhoglu
    Mert Nuhoglu over 1 year

    I need to remove read-only attributes of all files under a directory recursively on Windows using command line. Could you please provide an example on this?

  • LawrenceC
    LawrenceC over 10 years
    Add a /d if you want it to process the actual folders too.
  • Excelcius
    Excelcius about 9 years
    Note that this doesn't work with files markes as "hidden" or "system". In order to remove the read-only attribute from those files you have to remove the other attributes as well (for example attrib -h -r).
  • Daniel Hári
    Daniel Hári almost 8 years
    if path contain spaces put in "" like: attrib -r "c:\Program Files (x86)\SmartGit*.*" /s
  • Julius
    Julius almost 6 years
    This should be set as the best answer.
  • Broots Waymb
    Broots Waymb over 5 years
    Page at that link no longer exists.
  • Ste
    Ste over 4 years
    cd /d "path" & attrib -r "%cd%\*" /s can be used from current directory if required. Also as Daniel has said, wrap the path with one " either side.
  • user3026965
    user3026965 almost 4 years
    attrib -s -h -r "c:\path_to_folder\*.*" /s /d how do you apply this to the current working directory and all of its subdirs? In other words, if I am already in the c:\path_to_folder dir, and don't want to write the path again.
  • Just Shadow
    Just Shadow almost 4 years
    @user3026965 try the following: attrib -s -h -r *.* /s /d right from that folder