17:15

сабж со стажем
очень нужен способ удаления файла автоматически, периодически, win8

1) всех файлов *.xml на диске f:\

2) всех файлов в папках thumbs на диске f:\

3) всех файлов больше 10мб по пути f:\ispy\video

лучше средствами системы =) а ещё было бы клёво если при сбоях выдавалось неиллюзорное сообщение об ошибке. то есть либо по 1 и 2 заданиям не найдено соответствий, либо что-то не удалось удалить...

из сторонних нашёл только прогу www.deleteoldfiles.ru/ она не обладает нужным функционалом :(
www.snapfiles.com/get/belvedere.html прекрасная программа, но ни в какую не работает с флешками, вообще не видит файлов на них (а f:\ это флешка, да)
Cyber-D's Autodelete Download вообще ничего не умеет

Комментарии
05.03.2015 в 07:48

сабж со стажем
Ржавый Филин, не запускает :<
07.12.2015 в 15:39

сабж со стажем
Hikedaya, о великий скрипт-гуру :beg: ты ещё здесь? :alles:
можешь написать ещё кусок скрипта пожалуйста?
смотри, можно так...

если в папке video по пути f:\ispy\video есть другие папки, не важно сколько и с каким именем допустим одна папка с именем mya
а в них есть файлы *.mp4 старше чем 1 день (ну то есть типа сегодня 07 а есть файлы созданные 06-го)
то внутри папки mya создаётся папка с именем YYYYMMDD - по дате файлов, то есть например 20151206
и все файлы шестого числа туда перемещаются.
если нельзя чтобы имена папок были неизвестны и скрипт сам их находил и определял - напиши для трёх папок с произвольными именами, я сам имена подставлю

и ещё самый прикольный скрипт сложно будет?

если на диске f:\ свободного места меньше чем 2гига
то по пути f:\ispy\video во всех подпапках
удаляются самые старые файлы *.mp4 одного самого старого дня. например 20,11,2015-го
и все пустые папки
если места не стало больше 2 гига - ещё за один самый старый день например следующий 21,11,2015
и опять все пустые папки
и так пока места не станет больше 2 гига
07.12.2015 в 19:01

We rise up for the things we believe in over and over again
кракозябрик, получается нечто вроде этого:
Задача 1


Задача 2


Доработка напильником стандартная - поменять переменные в начале обоих скриптов. Если в первой задаче нежелательны разделители в именах каталогов (в моей версии там стоят тире), меняем Replace(".","-") на Replace(".","")
И да, тестирование - ОБЯЗАТЕЛЬНО.
08.12.2015 в 05:53

сабж со стажем
ух ты быстр! спасибо. буду проверять. а то вообще уже ну прикинь купил флешку усб3.0 думал ну хоть так тормозить не будет и нифига... 6000 файлов is a serious power
08.12.2015 в 15:53

сабж со стажем
а это нормально что в обоих скриптах нет ни стринга mp4? а то как-то даже боязно запускать...
08.12.2015 в 17:09

We rise up for the things we believe in over and over again
Нет, не нормально. Потому я и написал - проверять и тестировать :)
Get-ChildItem -path $dir.FullName -Recurse заменить на Get-ChildItem -path $dir.FullName -Recurse -include *.mp4
08.12.2015 в 17:29

сабж со стажем
а в первом Get-ChildItem -path $dir.FullName менять на Get-ChildItem -path $dir.FullName -include *.mp4 ? (там нет -Recurse)
08.12.2015 в 17:29

сабж со стажем
а в первом Get-ChildItem -path $dir.FullName менять на Get-ChildItem -path $dir.FullName -include *.mp4 ? (там нет -Recurse)
08.12.2015 в 18:18

We rise up for the things we believe in over and over again
Это уже на ваше усмотрение. Параметр -recurse заставляет скрипт искать файлы не только в текущем каталоге, но и во всех его подкаталогах. Но учитывая, что там будут создаваться новые папки и в них перемещаться старые файлы - может получиться каша, потому я этот параметр там и не указывал.
08.12.2015 в 18:27

сабж со стажем
да я не про рекурс, я про то что строку-то я правильно нашёл и mp4 правильно в неё вставил? :В
08.12.2015 в 18:30

We rise up for the things we believe in over and over again
Насчет этого - все правильно.
09.12.2015 в 19:22

сабж со стажем
чёт первый скрипт делает ничего :в
09.12.2015 в 19:37

We rise up for the things we believe in over and over again
Тогда напишите текущую струкуру каталогов/файлов, воспроизведу у себя и посмотрю, что и как. И да, неплохо было бы еще узнать даты создания файлов в тех каталогах. Засада может быть именно в датах.
09.12.2015 в 19:51

сабж со стажем
вот

s020.radikal.ru/i718/1512/aa/a432f281072c.gif

даты вот как в списке. создания/изменения/открытия практически одинаковы, секундами отличаются
09.12.2015 в 22:04

We rise up for the things we believe in over and over again
Исправленному верить :)
Строку
$files = Get-ChildItem -path $dir.FullName |
меняем на
$files = Get-ChildItem -path "$($dir.FullName)\*" -include "*.mp4" |
потому что параметр -include уже которую версию powershell работает весьма своеобразно. Нужно сказать, искать среди всех файлов (звездочка в конце пути), а с помощью -include сократить выборку до *.mp4
10.12.2015 в 05:37

сабж со стажем
слушай а я правильно понимаю, что второй скрипт физически работает так: взять список файлов - удалить один самый старый, и этот цикл идет пока места на диске не станет больше чем задано? если так, то а вот можно сделать чтобы он считывал список файлов только один раз? а то ну прикинь там будет 10000 файлов, и он будет раз 100 список файлов считывать. это будет очень долго.
10.12.2015 в 06:33

We rise up for the things we believe in over and over again
Именно так он работать и будет. Скорее всего как-то можно заставить его делать все за один проход, но сходу я не могу придумать, как именно. Просплюсь, тогда попробую :)
10.12.2015 в 06:38

сабж со стажем
ок. ну может вынести создание списка за цикл. Пусть сначала создаст список, а в цикле по одному файлу удаляет)
10.12.2015 в 15:43

сабж со стажем
заработало.
создаёт папку с датой +1 (файлы 9-го числа поместил в папку 10-12-2015)
формат даты неудобный - можно сначала год, потом месяц, потом день? то есть 20151209

второй скрипт не удаляет пустые папки по путям \ispy\video\блаблабла. можно чтобы удалял? и если можно, защитить папки thumbs и grabs. просто потому что :в (то есть если по скрину - чтобы удалял пустые папки в папках Jonmm Kyyze Lkwgw, кроме thumbs и grabs, и не выше и не ниже)

во втором скрипте не надо ничего с инклюде менять? а то сейчас строчка в нём выглядит так Get-ChildItem -path $dir.FullName -Recurse -include *.mp4 | вроде работает, но мало ли)
10.12.2015 в 15:43

сабж со стажем
заработало.
создаёт папку с датой +1 (файлы 9-го числа поместил в папку 10-12-2015)
формат даты неудобный - можно сначала год, потом месяц, потом день? то есть 20151209

второй скрипт не удаляет пустые папки по путям \ispy\video\блаблабла. можно чтобы удалял? и если можно, защитить папки thumbs и grabs. просто потому что :в (то есть если по скрину - чтобы удалял пустые папки в папках Jonmm Kyyze Lkwgw, кроме thumbs и grabs, и не выше и не ниже)

во втором скрипте не надо ничего с инклюде менять? а то сейчас строчка в нём выглядит так Get-ChildItem -path $dir.FullName -Recurse -include *.mp4 | вроде работает, но мало ли)
17.12.2015 в 09:24

сабж со стажем
пур?
19.12.2015 в 09:48

сабж со стажем
скрипт для удаления файлов сначала удаляет файл, а потом проверяет место. то есть я например поставил удалять не 1 а 1000 файлов чтобы он комп не вешал на несколько часов считыванием каталогов и сортировкой файлов... ну и он сначала 1000 файлов удалит а потом проверяет, сколько свободного места) посносил почти все файлы в итоге. но почему-то только с одной папки Jonmm, хотя должен с папки video вообще
10.01.2016 в 15:57

сабж со стажем
up?
10.01.2016 в 22:39

We rise up for the things we believe in over and over again
Прошу прощения за долгое молчание, было малость не до скриптов.
По первой задаче - да, формат даты можно поменять.
$folderName = (Get-date).date.ToString("d").Replace(".","-") меняется на
$folderName = (get-date).date.ToString("yyyyMMdd")

Вторая задача немного интереснее.

Как работает? Для начала берет список из всех mp4 файлов в подкаталогах D:\ispy\video, в самом этом каталоге тоже, сортирует их по дате. С этим списком уходит в цикл. Берет первый файл (он будет самым старым), проверяет свободное место на диске D:. Если места больше, чем 2GB, выходит из цикла обхода файлов. Если меньше, удаляет первый файл и принимается за следующий.
Когда закончит с файлами, строит список всех пустых каталогов дерева D:\ispy\video (каталог считается пустым, если на момент его проверки в нем нет ни единого файла или каталога). Для каждого найденного каталога проверяется его имя, и если оно не равно thumbs или grabs, каталог удаляется.
Рекомендация о тестировании остается в силе, как всегда.
11.01.2016 в 15:08

сабж со стажем
да всё норм тем более новый год же был) спасибо что терпишь мою наглость вообще

первый скрипт по-прежнему помещает вчерашние файлы в сегодняшнюю папку)

второй не удаляет файлы, окно быстро закрывается, такое впечатление что спикок файлов не строит. может опять что-то с include?
но! пустые папки удаляет
11.01.2016 в 17:43

We rise up for the things we believe in over and over again
Да, видимо Новый год из головы еще не выветрился.
Первый скрипт:
$folderName = (get-date).date.ToString("yyyyMMdd")
меняется на
$folderName = (Get-date).Date.AddDays(-1).tostring("yyyyMMdd")

Во втором скрипте строка с удалением файла закомментирована :) Убрать решетку вот здесь:
#Remove-item $file.fullname
11.01.2016 в 18:54

сабж со стажем
первый ok

второй то же самое(
11.01.2016 в 19:29

We rise up for the things we believe in over and over again
Зараза. Он почему-то отказывался смотреть в подкаталогах и искал только внутри каталога video.
$files = get-childitem "$rootdir\*" -file -Recurse -include "*.mp4" |
sort Creationtime
меняется на
$files = get-childitem $rootdir -file -Recurse -include "*.mp4" |
sort Creationtime

После этого дебажный вывод у меня прямо говорит, что файлы были найдены и в подкаталогах тоже. И да, сразу вопрос - какая версия powershell на компьютере стоит? Узнать можно, выполнив команду
$host

Похоже, что к 5-й работу -include все же починили, но в ранних нужно использовать костыли. У меня стоит пятая, но при желании можно найти вторую.
17.01.2016 в 08:30

сабж со стажем
всё работает *_*
версия 3
а можно этими скриптами с общественностью поделиться? наверняка кому-то ещё понадобятся
17.01.2016 в 08:54

We rise up for the things we believe in over and over again
Легко. Даже копирайты ставить не надо :)