Como remover o atributo somente leitura recursivamente no Windows 7

71

Eu preciso remover os atributos somente leitura de todos os arquivos em um diretório recursivamente no Windows 7 usando a linha de comando. Você poderia fornecer um exemplo disso?

Mert Nuhoglu
fonte
11
Fora da minha cabeça sem testesattrib /S -R
nixda

Respostas:

89

Eu usaria o comando ATTRIB, por exemplo:

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

attribé o comando
-ré o sinalizador para remover atributos somente leitura
c:\folder\*.*é a pasta na qual você está executando, além de caracteres curinga para todos os arquivos
/sé o sinalizador para executar todos os subdiretórios e arquivos

Aqui estão mais documentação e exemplos para o comando attrib: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/attrib

Callen L
fonte
17
Adicione a /dse desejar que também processe as pastas reais.
LawrenceC
2
Observe que isso não funciona com os arquivos marcados como "ocultos" ou "sistema". Para remover o atributo somente leitura desses arquivos, você também deve remover os outros atributos (por exemplo attrib -h -r).
Excelcius # 8/15
2
se o caminho contiver espaços "" colocados como: attrib -r "c: \ Arquivos de Programas (x86) \ SmartGit *. *" / s
Daniel Hári
A página desse link não existe mais.
Broots Waymb
25

Primeiro, abra um prompt de comando. Em seguida, cdno diretório em que deseja começar a aplicar as alterações de atributo. Por fim, digite o seguinte comando:

 attrib -R /S

Isso removerá o atributo somente leitura de todos os arquivos no diretório atual e recuará para fazer a mesma coisa em todos os subdiretórios.

stderr
fonte
9

Nota: A maioria das outras respostas está usando apenas o -rque pode não funcionar em arquivos que possuem systemou hiddenatributos definidos.

Então, aqui está uma solução para remover recursivamente o atributo somente leitura de todos os arquivos (incluindo aqueles que são do sistema ou ocultos) dentro de um diretório:

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

Descrição:
-s Remover atributo do sistema Remover atributo
-hoculto Remover atributo
-rsomente leitura /sDefinir / remover atributos na pasta atual e incluindo subpastas /dDefinir / remover também atributos das pastas

Just Shadow
fonte
2
Isso deve ser definido como a melhor resposta.
Julius
2

Eu criei este arquivo em lotes para fazer isso. Basicamente, esse arquivo em lotes limpa os atributos somente leitura no diretório em que está ou no diretório em e em todos os diretórios inferiores. Espero que alguém encontre um uso para isso. Desculpe qualquer código que possa parecer "ruim", pois estou começando a aprender arquivos em lote.

@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
Aprendiz lento
fonte
0

Muitas opções aqui, mas esse arquivo em lotes suporta a exclusão de pastas e / ou arquivos no próprio arquivo em lotes.

Salve este código abaixo em Read-only Off.bat.

Observe como o bit de gota funciona dentro do código.

@echo off
title ' %~nx0 ' by stephen147
color 5F
rem Place this inside a folder and run to remove the read-only attribute in the root folder and any folders or files within.
rem Or drop the folder/s and/or file/s to the batch file itself.
cd /d "%~dp0"
echo.
echo.Do you want to remove the read-only attributes inside this folder ? [ Ctrl + C to cancel ]
echo.
pause
echo.
echo.%cd%
attrib -s -d -r "%cd%\*.*"
attrib -s -d -r "%cd%"
rem This line supports dropping the folder/s and/or file/s to the batch file itself.
attrib -r "%*"
echo.
echo.Done
timeout /T 5
EXIT
Stephen Sherry
fonte