Если вы хотите что-то сделать из контекстного меню, вот один способ, который может сэкономить вам время, если вы пытаетесь сделать это много:
Создайте пакетный файл RemoveSysAttrib.bat
@echo off
attrib -s "%1%"
Затем следуйте этому руководству для добавления пользовательского приложения в контекстное меню: Как добавить любое приложение в контекстное меню рабочего стола Windows
Затем вы можете использовать пункт меню "Удалить системный атрибут", который делает это, используя ваш командный файл. Таким образом, вы также можете создать скрипт для добавления атрибута обратно. Может быть, немного неудобно заставить его работать для нескольких вариантов выбора файлов, но, если повезет, он запустит ваш файл один раз для каждого выбранного элемента. Вы хотите проверить это с:
@echo off
echo %1%
pause
Если он предоставляет имена файлов в виде атрибутов 1, 2, 3 и т.д., Вам придется циклически перебирать все параметры. Если указано более одного параметра, вы можете вызвать ваш скрипт рекурсивно следующим образом:
if NOT "%2%"=="" (
for %%A in (%*) do (
RemoveSysAttrib.bat "%%A"
)
) else (
attrib -s "%1%"
)
Надеюсь, что поможет =)
В ответ на комментарии Synetech:
Когда вы используете attrib
, он не изменит настройки H
или S
, если задан другой (он скажет, что файл XXXX не сбрасывается). Вам нужно будет удалить (или установить) оба, а затем заменить тот, который вы не хотите изменять, обратно на прежний.
Я расширил скрипт, чтобы проверить атрибут 'H', о котором сообщает команда attrib
Windows 7. Чтобы сделать его более общим, вам нужно будет проверить больше позиций подстроки, так как я догадываюсь, что в других версиях это отличается. У меня нет других версий Windows под рукой, поэтому я не могу проверить.
@echo off
setlocal enabledelayedexpansion
:: Check if file is hidden - works on Windows 7
set hidden=0
for /f "delims=" %%A in ('attrib "%1%"') do (
set attr=%%A
if "!attr:~4,1!"=="H" set hidden=1
)
:: If file is hidden, remove both attributes, then hide again.
if %hidden%==1 (
attrib -S -H "%1%"
attrib +H "%1%"
) else (
attrib -S "%1%"
)
endlocal