Показать полную графическую версию : Поиск и очистка временных файлов по средством BAT
snow1eopard
19-07-2011, 19:04
имеется файл в автозагрузке, написанный мною для очистки временных файлов, но хотелось бы чистить и все остальное, тот мусор которого в избытке напихано в винде, мог бы кто нибудь помочь по данному вопросу?
Т.е. ищем файлы с определенным расширением по всему диску и удаляем их, можно и забивая перед этим 0 1 0 1 соответсвенно размеру для пущей безопасности, ну это я шучу такое наверное невероятно сложно и долго))))
Сможет кто нибудь помочь?
Вот мой файл, просто чистит каталоги с временными файлами, может кому пригодится, 100% рабочий проверен везде где только можно:
@echo off
set temp1=%homedrive%\WINDOWS\Temp
rd /s /q %homedrive%\WINDOWS\Temp
md %temp1%
set temp2=%temp%
rd /s /q %temp%
md %temp2%
rd /s /q "%homepath%\Local Settings\Temp"
rd /s /q "%homedrive%%homepath%\Local Settings\Temporary Internet Files"
Маски временных файлы предназначенных для поиска и удаления:
*.---; *.#res; *.$db;
snow1eopard,
Удаляет все файлы с расширением *.---; *.#res; *.$db; в нашем случае в папке и в подкаталогах Temp.
+логирование
@echo off
:: Уберёш РЕМ если в пути к файлам имеются русские пути.
rem chcp 1251
::Логи
Set logpath=C:\Log.txt
::Где будем искать ? и удалять
Set Disk=C:\Temp
::Какие расширения?
set Rash=*.---; *.#res; *.$db;
For /R %Disk% %%i In (%Rash%) Do (
Del "%%i"
If Not Exist "%%i" (Echo %time:~0,-3% ^> Файл "%%i" успешно удален.>> "%logpath%")Else (Echo %Time:~0,-3% ^> Файл "%%i" не был удален.>> "%logpath%")
)
snow1eopard,
И к чему всё так накручено?
set temp2=%temp%
rd /s /q %temp%
md %temp2%
Когда это можно сделать так
rd /s /q %temp%
md %temp%
тоже самое
set temp1=%homedrive%\WINDOWS\Temp
rd /s /q %homedrive%\WINDOWS\Temp
md %temp1%
На
set temp1=%homedrive%\WINDOWS\Temp
rd /s /q %temp1%
md %temp1%
Явно не первая тема... http://forum.oszone.net/forumdisplay.php?f=102&filter_string=temp&filter_by=title
snow1eopard
20-07-2011, 00:28
root221 наверное так потому что по правильному не работает)
все работает, офигеть, большущее спасибо!
snow1eopard
20-07-2011, 01:20
Вот то что получилось, очищает от всего мусора что есть, закинув в автозагрузку ярлык с параметром свернуто имеем всегда чистую систему, аллилуйя :)
Проверил на своей системе Win7, все работает как надо. На XP не проверял.
@echo off
set temp1=%homedrive%\WINDOWS\Temp
rd /s /q %homedrive%\WINDOWS\Temp
md %temp1%
set temp2=%temp%
rd /s /q %temp%
md %temp2%
rd /s /q "%homepath%\Local Settings\Temp"
rd /s /q "%homedrive%%homepath%\Local Settings\Temporary Internet Files"
chcp 1251
::Логи
Set logpath=C:\Log.txt
::Где будем искать ? и удалять
Set Disk=C:\
::Какие расширения?
set Rash=*.---; *.#res; *.$db; *.*$; *.*~; *.?$?; *.?~?; *.@@@; *._detmp; *._mp; *.~*; *.00*; *.1st; *.bac; *.back*; *.bak; *.bup; *.chk; *.cpy; *.dir; *.dmp; *.err; *.fic; *.fnd; *.ftg; *.fts; *.gid; *.MS; *.nav; *.old; *.prv; *.sdi; *.shd; *.sik; *.syd; *.temp; *.tmp; *.wbk; *.xlk; *__ofidx*.*; *~tmp.*; _istmp*.*; ~*.*; 0*.nch; bootlog.*; brndlo?.txt; chklist.*; ffastun.*; iebak.da?; modemde?.txt; mscreat?.dir; ntbtlo?.txt; pspbrws?.jbf; scandis?.log; setuplo?.txt; suhdlog.*; t3v?????.*; thumb?.db; twain???.mtx; *.___;
REM *log.txt;
For /R %Disk% %%i In (%Rash%) Do (
Del "%%i"
If Not Exist "%%i" (Echo %time:~0,-3% ^> Файл "%%i" успешно удален.>> "%logpath%")Else (Echo %Time:~0,-3% ^> Файл "%%i" не был удален.>> "%logpath%")
)
set temp1=%homedrive%\WINDOWS\Temp
rd /s /q %homedrive%\WINDOWS\Temp
md %temp1% »
Уже обсуждалось, что при «RD + MD» теряются оригинальные атрибуты безопасности удаляемого каталога, и стоит делать иначе: «PUSHD + RD + POPD» — пробежитесь по фильтру из #4 (http://forum.oszone.net/post-1715949-4.html).
Всё хорошо до поры до времени:
скрипт выполнится на уже загрузившейся системе - в %TEMP% могут оказаться файлы, созданные в текущем сеансе, а не старый мусор
инсталляторы, требующие перезагрузки, тоже круто обломаются с такой автоматизацией
snow1eopard
20-07-2011, 11:16
Все таки обнаружилась проблемка, по расширению воспринимаются не только файлы с таким расширением, но и файлы с более длинным именем и двойным расширением, как можно такое вылечить?
Пример:
microsoft.bak удаляется
microsoft.bakground.exe удаляется тоже
Как сделать что бы жестко по маске удаляло, а не лупило все с бОльшим расширением и что бы не трогало файлы с двойным расширением, если таковых в маске нет.
что-то вроде этого
del/s/q *.txt *.vbs >>1.log
snow1eopard, никаких «двойных» расширений не существует. Т.о.: «microsoft.bakground» — имя, «exe» — расширение.
Приведите используемую Вами маску и список тех файлов, которые она излишне, по Вашему мнению, удаляет.
snow1eopard, только что создал в папке файлы
microsoft.bak
microsoft.bakground.exe
microsoft.bak - Удалился
microsoft.bakground.exe - Не удалился
Возможно у вас накручено, я вам уже писал »
тестируйте отдельно моим скриптом, потом добавьте своё творение и попробуйте.
отчёт:
19:02:45 > Файл "D:\bin\1\microsoft.bak" успешно удален.
а всё понятно решил добавить звёздочку здесь
*.bak*;
теперь
microsoft.bak - Удалился
microsoft.bakground.exe - Удалился
snow1eopard
21-07-2011, 12:36
Я свое творение и не добавлял когда тесил.
Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll
ясно, причина была в * после back
*.back*
спасибо, теперь все работает как должно.
death7lord
21-09-2013, 15:12
батники не изучал, но после поисков по инету собрал вот это:
@echo off
:: Убрать rem, если в пути к файлам имеются русские символы
rem chcp 1251
:: Где ищем
set disk=W
:: attrib убирает атрибуты "скрытый" и "системный" на удаляемых файлах во всех подкаталогах
:: del удаляет файлы по маске во всех подкаталогах
:: Ключ /F позволяет удалять файлы с атрибутом "только чтение"
attrib -H -S /S %disk%:\*.db
del /F /S /Q %disk%:\*.dbединственный минус - каждую маску приходится прописывать дважды....
:: Убрать rem, если в пути к файлам имеются русские символы
rem chcp 1251 »
Не надо. Причем дважды «не надо». Во-первых, надо — сохранять пакетный файл в кодировке OEM/866. Во-вторых — у Вас нигде не используются пути в приведённом коде.
единственный минус - каждую маску приходится прописывать дважды.... »
…
set sMask=%disk%:\*.db
…
attrib.exe -H -S /S "%sMask%"
del /F /S /Q "%sMask%"
…
death7lord
22-09-2013, 03:18
у Вас нигде не используются пути в приведённом коде» set disk=W »
Уточни, зачем там ЕХЕ ?
attrib.exe »
Это никак не пути, поскольку ниже есть явное указание именно на имя диска:
attrib -H -S /S %disk%:\*.db
del /F /S /Q %disk%:\*.db »
Пути в «set disk=W» без правки нижеследующего кода использовать не представляется возможным.
Уточни, зачем там ЕХЕ ? »
Для ясности. Иначе этим «attrib» может оказаться любой из .exe/.com/.bat/.cmd в текущем каталоге или в PATH.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.