В общем есть флешка и на ней стопиццот папок, подпапок, файлов, после вируса у большинства атрибут скрітій и системній, т.е. отображаются они только после показа скрітіх и системніх. Когда-то я помню делал cmd'шник делающий сброс атрибутов на нормальній, но сейчас сходу не могу вспомнить как прописать, чтобі скажем файл SetAttrib.cmd запущеній из корня флешки віполнил бі поставленую задачу. Подсобите правильно написать, а?
Вот так конечно срабатівает, но для конкретной папки, а прописівать вручную кажду влом, тем более если папка содержит кирилицу, то переводить каждое имя в ОЕМ866 вообще изврат
Код:
@echo off
chcp 1251
attrib -s -h autorun.old /s /d
Я просто не могу щас сходу вспомнить как делал... А говорят, в соседней теме, что мозг реально начинает работать токо после 50 лет. )))
У меня много чего есть на эту тему.
Если по самому простому, то вирусня делает скрытыми обычно только корневые папки без вложенных,
поэтому будем работать без рекурсии (так быстрее - особенно для флешки):
Код:
@echo off
SetLocal EnableExtensions
cd /d "%~dp0"
chcp 1251>nul
for /f "delims=" %%i in ('dir /b /a') do attrib -s -h "%%~i"
:: локализуем переменные, разрешаем использовать доп. ключи, например, /F - если такая опция принудительно отключена в реестре
SetLocal EnableExtensions
:: Переходим в папку с батником. Иначе, если батник запустить "От имни Администратора", операция будет произведена над C:\Windows\System32, чего мы совсем не ожидаем
cd /d "%~dp0"
:: Переходим на кодовую страницу с большим кол-вом поддерживаемых символов:
:: т.е. сможет обрабатывать, например, украинские буквы в именах
chcp 1251>nul
for /f "delims=" - на разбивать имена с пробелами на части
:: /B - віводить только имена без доп. инфы
:: /A - показывать файлы с любыми атрибутами
dir /b /a
А это вариант со сбросом прав и восстановлением владельца.
Этап работ с правами задействуется только в случае, когда обычных прав не хватило для изменения атрибутов файла/папки.
Код:
@echo off
SetLocal EnableExtensions
cd /d "%~dp0"
Set "Cur=%~dp0"
Set "Cur=%Cur:~0,-1%"
chcp 1251 >nul
for /f "delims=" %%i in ('dir "%Cur%\*" /b /a') do Call :RecovFolder "%Cur%\%%i"
pause
exit /B
:RecovFolder [Полный путь к объекту]
attrib -s -h "%~1"
attrib "%~1"|>nul FindStr /BIR "....H.."
if not errorlevel 1 (
Call :GrantAccess "%~1"
attrib -s -h "%~1"
) else (
attrib "%~1"|>nul FindStr /BIR "...S..." && (
Call :GrantAccess "%~1"
attrib -s -h "%~1"
)
)
exit /b
:GrantAccess [Полный путь к объекту]
takeown /f "%~1" /d y
echo y|cacls "%~1" /g %username%:f
exit /b