PDA

Показать полную графическую версию : Поиск и очистка временных файлов по средством 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;

root221
19-07-2011, 22:00
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%")
)

root221
19-07-2011, 22:55
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%

Vadikan
19-07-2011, 23:05
Явно не первая тема... 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%")
)

Iska
20-07-2011, 05:19
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).

Busla
20-07-2011, 10:29
Всё хорошо до поры до времени:
скрипт выполнится на уже загрузившейся системе - в %TEMP% могут оказаться файлы, созданные в текущем сеансе, а не старый мусор
инсталляторы, требующие перезагрузки, тоже круто обломаются с такой автоматизацией

snow1eopard
20-07-2011, 11:16
Все таки обнаружилась проблемка, по расширению воспринимаются не только файлы с таким расширением, но и файлы с более длинным именем и двойным расширением, как можно такое вылечить?

Пример:
microsoft.bak удаляется
microsoft.bakground.exe удаляется тоже


Как сделать что бы жестко по маске удаляло, а не лупило все с бОльшим расширением и что бы не трогало файлы с двойным расширением, если таковых в маске нет.

ferget
20-07-2011, 11:46
что-то вроде этого

del/s/q *.txt *.vbs >>1.log

Iska
20-07-2011, 12:45
snow1eopard, никаких «двойных» расширений не существует. Т.о.: «microsoft.bakground» — имя, «exe» — расширение.

Приведите используемую Вами маску и список тех файлов, которые она излишне, по Вашему мнению, удаляет.

root221
20-07-2011, 19:08
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единственный минус - каждую маску приходится прописывать дважды....

Iska
21-09-2013, 19:07
:: Убрать 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 »

Iska
22-09-2013, 03:42
Это никак не пути, поскольку ниже есть явное указание именно на имя диска:
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