PDA

Показать полную графическую версию : [решено] батник для автоматического удаления сетевых папок


Страниц : [1] 2

vanoman
16-10-2013, 21:00
помогите, плиз, написать батник ,цель которого удалить содержимое сетевых папок, но не сами папки, и удалить содержимое за неделю до сегодняшнего дня. Например, сегодня 16, значит в папках надо удалить все файлы до 9.10 , а с 10-16 не трогать .
просто в домене есть папка \\agp.local\docs\обмен. В этом обмене есть папки пользователей.Папка иванов, петров,сидоров ... и прочее. Вот как раз-таки содержимое этих папок , но не сами папки иванов, петров сидоров... удалить за неделю до сегодняшнего дня, все содержимое созданное от 10-16 оставить.
Просто это действие надо как-то оптимизировать. В этих папках пользователи накапливают всякую срань, которая занимает место на серваке и поэтому надо как-то очищать место и каждый понедельник надо чистить за прошлую неделю.

sunnykey
17-10-2013, 12:34
а если в папках иванов, петров содержаться ещё папки? Что делать с ними?

Molchune
17-10-2013, 12:42
какой сервак? Почему именно cmd?
Вот на PS (удаляются все файлы которые последний раз изменялись более 7 дней назад)

Set-location "\\agp.local\docs\обмен"
$timex = get-date
$timex = $timex.AddDays(-7)
dir | where {$_.lastwritetime -le $timex} | del -Recurse -force



cmd умри, powershell живи=) »
Стопудово. У всех уже в большинстве стоит не ниже Win2008 пора бы PS уже использовать.

Elven
17-10-2013, 13:05
Имхо на cmd есть два решения, одно простое второе сложное.
1. Простое заключается в запуске по понедельникам (это через шедулер) батник вида:
@echo off
{for /f %%usrname [в зависимости от доп условий см.*] (}
rd /s /q "\\agp.local\docs\обмен\%%usrname\Прошлая неделя"
ren "\\agp.local\docs\обмен\%%usrname\Текущая неделя" "\\agp.local\docs\обмен\%username%\Прошлая неделя"
md "\\agp.local\docs\обмен\%%usrname\Текущая неделя"
)

* если имена папок соответствуют доменным учеткам то запускаем батник на файлсервере с запросом FOR через DSQUERY USER, если они названы "как понравилось" точно так же с файлсервера но привязываем FOR к DIR из каталога "Обмен".

2. Второй способ откровенно геморройный и не дает никакой гарантии что будут удалены ТОЛЬКО ненужные фалы. Сам писать не буду (не помню ключей на память) но суть такова: сканируем папки всех пользователей через DIR, сортируем по дате последнего использования и сносим те которые не использовались больше недели (сначала удаляем файлы потом папки если те являются пустыми).
Сразу скажу этот способ я года три назад пытался реализовать, но умения по-видимому не хватило, и терпение лопнуло, и (что было решающим фактором) работу сменил.

Цитата Molchune:
удаляются все файлы которые последний раз изменялись более 7 дней назад »
Файл может не изменяться но использоваться. Обычно пользователи не дезассемблируют *.exe но продолжают их запускать.

vanoman
17-10-2013, 15:43
sunnykey, папки которые в иванов, петров, сидоров тоже удаляются.
должно быть так
\\agp.local\docs\обмен\иванов\ все подпапки иванова удалять согласно времени.
Molchune, сервак пока 2003, на новый денЯг нет)) но удалять я буду со своего компа, на моем ХР.
Elven,
* если имена папок соответствуют доменным учеткам то запускаем батник на файлсервере с запросом FOR через DSQUERY USER, если они названы "как понравилось" точно так же с файлсервера но привязываем FOR к DIR из каталога "Обмен". »
походу они не соотв доменным учеткам. Там можно создать папку с любым названием .
батник я запускаю не на серваке , а со своего компа, хотя я могу удалено зайти на сервер. А можете подробно рассказать как привязать батник for к dir.
ну вот скрин этой папки

я новичок пока в системном администрировании, ещё только читаю, да на своих ошибках учусь. но не понимаю чем PS отличается от cmd. Команды одни и теже.

Molchune
17-10-2013, 16:36
Molchune, сервак пока 2003, на новый денЯг нет)) но удалять я буду со своего компа, на моем ХР. »
На XP уже давно PS накатывается обновлением. Я бы все таки поставил. И посмотрел бы. И там все таки есть GUI с ним более практичней получается

Elven
17-10-2013, 17:44
Конечный батник будет выглядеть приблизительно так
@echo off
rem %%usrname - переменная указывающая имя папки
for /f %%usrname in (dir /B /A:D \\agp.local\docs\обмен) do (
rd /s /q "\\agp.local\docs\обмен\%%usrname\Прошлая неделя"
ren "\\agp.local\docs\обмен\%%usrname\Текущая неделя" "\\agp.local\docs\обмен\%username%\Прошлая неделя"
md "\\agp.local\docs\обмен\%%usrname\Текущая неделя"
)
Запускать по идее можно и с твоего компа, однако лучше запускать с сервака и указать абсолютный путь от буквы диска (вместо "\\agp.local\docs\обмен\" вставить например "D:\shares\agp.local\docs\обмен\"). И будь осторожен с рускосимвольными названиями папок, обрати внимание на кодировку.

Iska
17-10-2013, 19:42
Что за «%%usrname»?!

Elven
17-10-2013, 20:54
Цитата Iska:
Что за «%%usrname»?! »
Просто переменная, вместо нее можно вполне впихнуть %%direcrtoryname (что как теперь выяснилось было бы правильнее) и тоже по идее будет работать. Обычно если батник состоит больше чем из трех строчек я предпочитаю использовать переменные хоть что-то значащие, а то потом никакие комментарии не помогут разобраться зачем санитары повязали милиции, откуда взялись пожарные и при чем тут вообще мертвый попугай.

Iska
17-10-2013, 22:37
а то потом никакие комментарии не помогут разобраться зачем санитары повязали милиции, откуда взялись пожарные и при чем тут вообще мертвый попугай. »
Вот-вот. Потому как уже сейчас в:Конечный батник »
нет определения этой переменной.

Elven
18-10-2013, 09:41
Пофиксил. (см. правку поста #7)

sunnykey
18-10-2013, 12:13
Molchune:
Вот на PS (удаляются все файлы которые последний раз изменялись более 7 дней назад)
Код:
Set-location "\\agp.local\docs\обмен"
$timex = get-date
$timex = $timex.AddDays(-7)
dir | where {$_.lastwritetime -le $timex} | del -Recurse -force [post=2235986]»
Таким кодом можно удалить и папку иванов, если он в отпуск уйдёт и неделю не будет писать в папку ничего
лучше последнюю строку заменить на такую
dir | ? {$_.Attributes -eq [System.IO.FileAttributes]::Directory} | `
% {dir $_.FullName -Force -Recurse | ? {$_.lastwritetime -le $timex} | `
del -Recurse -force}

Molchune
18-10-2013, 13:12
Таким кодом можно удалить и папку иванов, если он в отпуск уйдёт и неделю не будет писать в папку ничего
лучше последнюю строку заменить на такую »
Ну да..
Просто у меня тоже как раз папка обмена и зачастую они сами там чет делают... я просто уже года 3 туда не лазил.. Пользователи не ругаются (правда там исключения для пары папок есть) Но размер маленький. + еще папка для ежедневного обмена. это вообще просто маза туда время от времени что нить мощное заливают, а через день уже пусто.

vanoman
20-10-2013, 12:27
друзья, я завтра на работе сделаю сначала бэкап папок, а потом попробую удалять как батником, так и PS поставлю. О результатах напишу. Но так чем cmd от PS отличается?))

vanoman
21-10-2013, 13:16
Elven, батник что-то не запускается. я даже на диск С не могу выйти
sunnykey, поставил себе ps , но при запуске выдаются какие то красные строки

Molchune
21-10-2013, 15:47
Ну вот попробовал у себя

Set-location "\\NameServer\Folder1\Folder2"
$timex = get-date
$timex = $timex.AddDays(-7)
dir | ? {$_.Attributes -eq [System.IO.FileAttributes]::Directory} |% {dir $_.FullName -Force -Recurse | ? {$_.lastwritetime -le $timex} | del -Recurse -force -whatif}

все норм удаляет.

Посмотрите мб там длина получается более 255 символов.
И путь укажи не через имя домена.

Ну и результат еще раз в студию

Elven
21-10-2013, 17:02
Включи режим отображения команд в начале батника @echo on и запусти прямо из командной строки. Либо он не видит по каким-то причинам шары, либо таки грабли с рускосимвольными папками.
кстати переход на другой диск из командной строки не так делается.
с:
или если так уж хочется через cd
cd /d c:\

vanoman
22-10-2013, 11:40
Molchune, Elven,
пока что-то ошибки с кракозябрами мучают. Хотел скринами показать, но подумал, что видео на 1 минуту целесообразнее. Тут интерактивно видно, что я делаю
http://vimple.ru/0bed8471aee24829bac1c67c2fd8a30a

Elven
22-10-2013, 13:16
Полюбовался на 14 секундный ролик о том что видео недоступно. Если проблемы с кракозябрами значит дело все же в кодировках. Держи готовый:
105667

vanoman
22-10-2013, 14:17
чертов вимпл и правда видео не загрузил. ладно вот яндекс
http://video.yandex.ru/users/jerrymaya/view/16/




© OSzone.net 2001-2012