Как рекурсивно удалить атрибут read-only в Windows 7
Мне нужно удалить атрибуты всех файлов в директории, доступной только для чтения, рекурсивно на Windows 7 с помощью командной строки. Не могли бы вы привести пример?
Мне нужно удалить атрибуты всех файлов в директории, доступной только для чтения, рекурсивно на Windows 7 с помощью командной строки. Не могли бы вы привести пример?
Я бы использовал команду ATTRIB, например:
attrib -r c:\folder\*.* /s
attrib
это команда
-r
это флаг для удаления атрибутов, доступных только для чтения
c:\folder\*.*
это папка, в которой вы его запускаете, плюс подстановочные знаки для всех файлов
/s
это флаг для выполнения всех подкаталогов и файлов
Вот еще документация и примеры для команды атрибутов: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/attrib
Сначала откройте командную строку. Затем cd
в каталог, в котором вы хотите начать применение изменений атрибута. Наконец, введите следующую команду:
attrib -R /S
Это удалит атрибут “только для чтения” из всех файлов в текущем каталоге, а затем повторит его вниз, чтобы сделать то же самое во всех подкаталогах.
attrib
Заметки: Большинство других ответов используют только -r
, что может не работать с файлами, которые имеют набор атрибутов system
или hidden
.
Таким образом, вот решение для рекурсивного удаления атрибута read-only из all файлов (включая системные или скрытые) внутри каталога:
attrib -s -h -r "c:\path_to_folder\*.*" /s /d
Описание:
-s
Удалить системный атрибут
-h
Удалить скрытый атрибут
-r
Удалить атрибут только для чтения/s
Установить/удалить атрибуты в текущей папке и включая подпапки/d
Установить/удалить и атрибуты папок тоже
Для этого я создал этот пакетный файл. В основном, этот пакетный файл очищает только прочитанные атрибуты в каталоге, в котором он находится, или во всех нижних каталогах. Надеюсь, кто-нибудь найдет ему применение. Извините любой код, который может показаться “плохим”, так как я только начал изучать пакетные файлы самостоятельно.
@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
Здесь много опций, но этот пакетный файл поддерживает сброс папки/s и/или файла/s в сам пакетный файл.
Сохраните этот код ниже в Read-only Off.bat
.
Обратите внимание на то, как работает бит падения внутри кода.
@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