Jak rekurencyjnie usunąć atrybut „tylko do odczytu” w systemie Windows 7

68

Muszę usunąć rekurencyjne atrybuty wszystkich plików w katalogu rekurencyjnie w systemie Windows 7 za pomocą wiersza polecenia. Czy możesz podać przykład?

Mert Nuhoglu
źródło
1
Z mojej głowy bez testowaniaattrib /S -R
nixda

Odpowiedzi:

83

Chciałbym użyć polecenia ATTRIB, na przykład:

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

attribto polecenie
-r isflagą do usuwania atrybutów tylko do odczytu
c:\folder\*.*jest folder, w którym go uruchamiasz, a symbole wieloznaczne dla wszystkich plików
/sto flaga do wykonywania wszystkich podkatalogów i plików

Oto więcej dokumentacji i przykładów dla polecenia attrib: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/attrib

Callen L.
źródło
14
Dodaj, /djeśli chcesz, aby przetwarzało także rzeczywiste foldery.
LawrenceC
2
Pamiętaj, że nie działa to z oznaczeniami plików jako „ukryte” lub „systemowe”. Aby usunąć atrybut tylko do odczytu z tych plików, musisz również usunąć inne atrybuty (na przykład attrib -h -r).
Excelcius
2
jeśli ścieżka zawiera spacje wstawione w „” jak: attrib -r "c: \ Program Files (x86) \ SmartGit *. *" / s
Daniel Hári
Strona pod tym linkiem już nie istnieje.
Broots Waymb
24

Najpierw otwórz wiersz polecenia. Następnie cddo katalogu, w którym chcesz rozpocząć stosowanie zmian atrybutów. Na koniec wprowadź następujące polecenie:

 attrib -R /S

Spowoduje to usunięcie atrybutu „tylko do odczytu” ze wszystkich plików w bieżącym katalogu, a następnie przejdzie w dół, aby zrobić to samo we wszystkich podkatalogach.

stderr
źródło
8

Uwaga: Większość innych odpowiedzi są tylko przy użyciu -rktórej może nie działać na plikach, które mają systemlub hiddenatrybutów ustawionych.

Oto rozwiązanie rekurencyjnego usuwania atrybutu „tylko do odczytu” ze wszystkich plików (w tym plików systemowych lub ukrytych) w katalogu:

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

Opis:
-s Usuń atrybut systemowy
-hUsuń ukryty atrybut
-rUsuń atrybut tylko do odczytu /sUstaw / usuń atrybuty w bieżącym folderze i włączając podfoldery /dUstaw / usuń atrybuty folderów

Just Shadow
źródło
1
To powinno być ustawione jako najlepsza odpowiedź.
Julius
2

Utworzyłem ten plik wsadowy, aby to zrobić. Zasadniczo ten plik wsadowy wyczyści atrybuty tylko do odczytu w katalogu jego wewnątrz lub w katalogu we wszystkich niższych katalogach. Mam nadzieję, że ktoś znajdzie zastosowanie. Przepraszam za kod, który może wydawać się „słaby”, ponieważ sam zaczynam się uczyć plików wsadowych.

@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
SlowLearner
źródło
0

Wiele opcji tutaj, ale ten plik wsadowy obsługuje upuszczanie folderu / si pliku / s do samego pliku wsadowego.

Zapisz ten kod poniżej w Read-only Off.bat.

Uwaga: jak działa bit upuszczania w kodzie.

@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
źródło