IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Обсуждение программ (http://www.imho.ws/forumdisplay.php?f=3)
-   -   Очистка директорий по расписанию (http://www.imho.ws/showthread.php?t=95575)

atch 08.11.2005 23:45

Очистка директорий по расписанию
 
Нужна прога, которая умеет чистить указанные директории по расписанию, и шобы с 2003 сервером работала.
В идеале:
- создаем job
- указываем какие папки надо периодически чистить
- прописываем исключения
- говорим когда все это запускать (скажем, ночью)
- сохраняем job и забываем обо всем этом

Заранее благодарствую!
:молись:

ЕЖ 09.11.2005 01:28

Ну так проще всего не искать программы, а написать в bat-файле в каких каталогах и что удалять с помощью масок. И задать этот bat на исполнение по расписанию с помошью стандартных Scheduled Tasks в панели управления.

atch 09.11.2005 09:16

это я уже пробовал
директории исчисляются сотнями и постоянно меняются
конечно, можно заделать батник с масками, но его придется постоянно править :(
может, возможен такой вариант:
какой-нибудь прогой все это барахло бакапить в один файл с удалением источников, а потом уже батником удалять этот файл
есть ли такой бакапщик, что удаляет источники?
там еще есть проблема занятых системой файлов - их в процессе тоже надо как-то обходить

ЕЖ 09.11.2005 09:27

Цитата:

atch:
директории исчисляются сотнями и постоянно меняются
конечно, можно заделать батник с масками, но его придется постоянно править
Странно, а будь у тебя спец программа для удаления содержимого каталогов - её разве не придется всё время перенастраивать?

В общем если так уж хочется программу, то смотри nnCron и nnBackup - есть там и удаление и бэкапы и расписание. Но опять же всё надо будет поднастраивать.

FACE CONTROL 13.12.2010 16:41

Цитата:

Сообщение от atch (Сообщение 1063893)
Ну так проще всего не искать программы, а написать в bat-файле

а ктонибудь может подсказать содержимое этого батничка для удаления файлов из определенной папки???

добавлено через 20 минут
ну т.е. сам батник я то написал

@echo off
del "D:\111\"

но просто он передь удалением спаршивает y или n
а как сделать чтобы y вводилось автоматом?

добавлено через 5 минут
и еще можно ли сделать так что бы он удалял не только файлы в директории 111 но и папки???

Plague 13.12.2010 16:45

Цитата:

Сообщение от FACE CONTROL (Сообщение 1731687)
а как сделать чтобы y вводилось автоматом?

ключ /Q и звездочка для удаления всего.
Код:

del D:\111\* /Q

FACE CONTROL 13.12.2010 16:57

Цитата:

Сообщение от Plague (Сообщение 1731692)
/Q

это погло перестал спрашивать y или n

Цитата:

Сообщение от Plague (Сообщение 1731692)
звездочка для удаления всего.

удаляет только файлы папки оставляет

Plague 13.12.2010 18:01

есть еще rmdir, но оно удаляет всё вместе с заданным каталогом, а как раз звездочку в качестве указания пути (удалять всё что внутри, а сам заданный каталог не трогать) почему то воспринимать не хочет.

таким образом на ум приходит следующее:
Код:

@echo off
rmdir D:\111 /Q /S
mkdir D:\111

хотя не удивлюсь если есть еще какой волшебный ключик....

Alex Dark 13.12.2010 20:26

FACE CONTROL результат выполнения батника - чистый катаолг
Код:

D:\WinRAR\Rar.exe m -r D:\WinRAR\arx "C:\Documents and Settings\Владелец\Local Settings\Temp\*.*"
erase D:\WinRAR\arx.rar

первая строка сжала и очистила временный каталог со всеми папками внутри.
Вторая строка удалила архив.

PS можно конечно написать на VB, но сейчас уже поздно. Если надо - напиши, попробую

Plague 13.12.2010 20:39

решение конечно оригинальное и достойное... :yees: но если в том темпаре гигабат по 30-40 набирается, то сказочка совсем недетская получится... а для мелочи - вполне.

Alex Dark 13.12.2010 21:57

Цитата:

Сообщение от Plague (Сообщение 1731714)
решение конечно оригинальное и достойное..

Я подобной проблемой занимался ещё в начале девяностых.
Вариант был: рекурсия, которая может озябнуть в определенный момент.
Второй вариант: то что я предложил сделать на VB тупой до безобразия и медленный алгоритм, без рекурсии.
Когда сначала из пути удаляются файлы, потом ищется первый каталог и цикл повторяется.
Если каталога нет то удаляется тот в котором находимся и начинаем с начала. Рано или поздно удалится всё.
Третий вариант - именно с раром или winzip тогда был. Не помню...

Цитата:

Сообщение от Plague (Сообщение 1731714)
но если в том темпаре гигабат по 30-40 набирается

для этого команда правится с разбиением архива на части например по 300 метров.
одновременно с батником запускается другой батник, который тупо грохает файлы arx.* (предполагается что архивы arx.001 ...)
второй батник может вообще висеть в памяти и не выгружаться.
А можно и выгрузить по условию.

BorLase 13.12.2010 22:32

хм... может, я чего-то не понимаю, но вариант с rmdir-mkdir мне нравится гораздо больше...

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

Val14 13.12.2010 23:01

Цитата:

Сообщение от BorLase (Сообщение 1731749)
вариант с rmdir-mkdir мне нравится гораздо больше

если не страшит потеря пермишенсов, то это самое простое

PS.
Цитата:

Сообщение от atch (Сообщение 1063724)
и шобы с 2003 сервером работала

родное решение - ForFiles

_http://www.osp.ru/win2000/2006/04/2603566/
_http://technet.microsoft.com/ru-ru/library/cc753551(WS.10).aspx#Mtps_DropDownFilterText

BorLase 14.12.2010 12:35

clear.bat:
Код:

del %1\*.* /q /s /f
FOR /f %%Z IN ('dir /ad /b %1') DO (
        rmdir %1\%%Z /q /s
)

вызов: clear.bat d:\111

удаляет все в указанном каталоге, оставляя сам каталог на месте

PS: точнее, даже так - в цикле только каталоги удалять надо

Borland 14.12.2010 19:05

Цитата:

Сообщение от FACE CONTROL (Сообщение 1731687)
как сделать чтобы y вводилось автоматом?

echo y |del D:\111\*

Цитата:

Сообщение от BorLase (Сообщение 1731815)
clear.bat:

Код:

pushd "%~1" && 1>nul 2>nul rd /s /q .
И никаких циклов... :gigi:
У меня такая конструкция используется для чистки %TEMP%, правда не в батнике, а прям в ярлык зашито...
For там можно и не приплетать...
При отсутствии параметра %1 или если нельзя перейти в указанную папку - не делает ничего.
При наличии папки - вычищает из неё всё содержимое (кроме файлов, которые используются, их система удалить не даёт) и завершает работу.

Зачем вставлено "1>nul 2>nul"? rd при таком способе запуска ругается, что не может удалить папку (естественно - ибо она сама запущена изнутри этой папки :biggrin: ). А данное перенаправление скрывает всю "ругань".

BorLase 14.12.2010 19:49

а вот сюрприз от Билли...

оказывается, при передаче имени каталога, который содержит знак =, передается вообще непонятно что!

Код:

d:\tmp>clear.bat d:\=dta=\111

d:\tmp>pushd "d:\"  && dir . 1>nul 2>nul

хорошо, вовремя Ctrl-C нажал... :eek: чуть диска не лишился...

Plague 14.12.2010 20:02

ну в общем-то знак равно "=" это служебный символ, так что ничего удивительного. и файлы/каталоги с названием содержащим служебные символы во всех руководствах категорически не рекомендуют создавать, даже если сама файловая это позволяет.

BorLase, от тебя, как знающего никсы не по наслышке, это более чем странно слышать... :p

BorLase 14.12.2010 20:22

честно говоря, более чем озадачен :idontnow: это ж не URL, в котором он используется...

в общем - век живи, век наступай на грабли :contract:

Borland 14.12.2010 20:32

Цитата:

Сообщение от BorLase (Сообщение 1731895)
Сюрприз от Билли...

Есть такая буква в этом слове.
bat/cmd вообще очень не любят служебных символов в именах файлов/папок.
Для данного конкретного случая (знак "=") сработает код
Код:

pushd %1 && 1>nul 2>nul rd /s /q .
При этом параметр, передаваемый .cmd, должен быть заключён в двойные кавычки ".
Цитата:

Сообщение от Plague (Сообщение 1731898)
файлы/каталоги с названием содержащим служебные символы во всех руководствах категорически не рекомендуют создавать

У меня ещё с DOS привычка - в именах файлов/папок использовать латиницу, цифры, "-", "_" и не более того. Ну, ещё "." и кириллицу (благоприобретённое от винды). :biggrin:
А самое страшное в имени файла - это "%" и "!"...

BorLase 14.12.2010 20:39

Цитата:

Сообщение от Borland (Сообщение 1731905)
У меня ещё с DOS привычка

да, собственно, все мы оттуда родом :)

%, >, *, < - это все понятно

а вот с какого перепуга = вдруг под запретом, не пойму; он же вродь бы нигде ни в одной конструкции cmd не используется?

Sergeln 14.12.2010 21:42

Для очистки каталога Temp стал использовать скрипт на VBS, при выполнении не видно, лишних вопросов тоже не задает, код корявый, но суть понятна
Нажмите здесь, чтобы увидеть текст полностью
'Скрипт для очистки каталога TEMP
'от устаревших временных файлов и
'каталогов. Временной период - 10 дней.
' sDIR - путь на ТЕМР.
' sDIR2 - путь на ТМР.
'Ложить в Автозагрузка/Startup
'
Set fso = CreateObject("Scripting.FileSystemObject")
sDIR="D:\Temp"
sDIR2="D:\Tmp"
sEXT="TMP"
fDate=Date-10
Set objDIR=fso.GetFolder(sDIR)
Set sf=objDIR.Files
Set fcf = objDIR.SubFolders
Set objDIR2=fso.GetFolder(sDIR2)
Set sf2=objDIR2.Files
Set fcf2 = objDIR2.SubFolders

On Error Resume Next
For Each efile in sf
fEXT=fso.GetExtensionName(efile)
if LCase(fEXT)=LCase(sEXT) Then
fso.DeleteFile(efile)
elseif efile.DateLastModified<fdate then
fso.DeleteFile(efile)
end if

next
For Each efile in sf2
fEXT=fso.GetExtensionName(efile)
if LCase(fEXT)=LCase(sEXT) Then
fso.DeleteFile(efile)
elseif efile.DateLastModified<fdate then
fso.DeleteFile(efile)
end if

next

For Each f1 in fcf
if f1.DateLastModified<fdate then
fso.Deletefolder(f1)
end if

next

For Each f2 in fcf2
if f2.DateLastModified<fdate then
fso.Deletefolder(f2)
end if

next
Err.Clear

Borland 14.12.2010 21:51

Sergeln, тоже вариант...
Только мне лично проще в виндовый шедулер вставить задачу
Код:

pushd %TEMP% && rd /s /q .
Хватает раза в сутки, ночью...

Alex Dark 15.12.2010 07:48

Цитата:

Сообщение от Borland (Сообщение 1731905)
А самое страшное в имени файла - это "%" и "!"...

А ещё страшное это кавычки: открывающиеся и закрывающиеся. Получаются они когда сохраняют страничку из инета ни диск.
Проводник их жуёт, а вот FAR давится.

Borland 15.12.2010 10:15

Вложений: 4
Цитата:

Сообщение от Alex Dark (Сообщение 1731952)
FAR давится.

Неправда Ваша! :gigi:
FAR умеет работать в UTF-8.
Даже cmd не "давится", если запускать с ключом "/u" (в Юникоде)...
См. аттачи...

Alex Dark 15.12.2010 12:08

Не спорю, я не разбирался.
Когда сталкиваюсь с такой проблемой то просто жмякаю shif+enter и уже в эксплорере парюсь.

За наводку сенкс.


Часовой пояс GMT +4, время: 18:04.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.