сабж со стажем
очень нужен способ удаления файла автоматически, периодически, 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 вообще ничего не умеет
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 вообще ничего не умеет
можешь написать ещё кусок скрипта пожалуйста?
смотри, можно так...
если в папке 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 гига
Задача 1
Задача 2
Доработка напильником стандартная - поменять переменные в начале обоих скриптов. Если в первой задаче нежелательны разделители в именах каталогов (в моей версии там стоят тире), меняем Replace(".","-") на Replace(".","")
И да, тестирование - ОБЯЗАТЕЛЬНО.
Get-ChildItem -path $dir.FullName -Recurse заменить на Get-ChildItem -path $dir.FullName -Recurse -include *.mp4
s020.radikal.ru/i718/1512/aa/a432f281072c.gif
даты вот как в списке. создания/изменения/открытия практически одинаковы, секундами отличаются
Строку
$files = Get-ChildItem -path $dir.FullName |
меняем на
$files = Get-ChildItem -path "$($dir.FullName)\*" -include "*.mp4" |
потому что параметр -include уже которую версию powershell работает весьма своеобразно. Нужно сказать, искать среди всех файлов (звездочка в конце пути), а с помощью -include сократить выборку до *.mp4
создаёт папку с датой +1 (файлы 9-го числа поместил в папку 10-12-2015)
формат даты неудобный - можно сначала год, потом месяц, потом день? то есть 20151209
второй скрипт не удаляет пустые папки по путям \ispy\video\блаблабла. можно чтобы удалял? и если можно, защитить папки thumbs и grabs. просто потому что :в (то есть если по скрину - чтобы удалял пустые папки в папках Jonmm Kyyze Lkwgw, кроме thumbs и grabs, и не выше и не ниже)
во втором скрипте не надо ничего с инклюде менять? а то сейчас строчка в нём выглядит так Get-ChildItem -path $dir.FullName -Recurse -include *.mp4 | вроде работает, но мало ли)
создаёт папку с датой +1 (файлы 9-го числа поместил в папку 10-12-2015)
формат даты неудобный - можно сначала год, потом месяц, потом день? то есть 20151209
второй скрипт не удаляет пустые папки по путям \ispy\video\блаблабла. можно чтобы удалял? и если можно, защитить папки thumbs и grabs. просто потому что :в (то есть если по скрину - чтобы удалял пустые папки в папках Jonmm Kyyze Lkwgw, кроме thumbs и grabs, и не выше и не ниже)
во втором скрипте не надо ничего с инклюде менять? а то сейчас строчка в нём выглядит так Get-ChildItem -path $dir.FullName -Recurse -include *.mp4 | вроде работает, но мало ли)
По первой задаче - да, формат даты можно поменять.
$folderName = (Get-date).date.ToString("d").Replace(".","-") меняется на
$folderName = (get-date).date.ToString("yyyyMMdd")
Вторая задача немного интереснее.
Как работает? Для начала берет список из всех mp4 файлов в подкаталогах D:\ispy\video, в самом этом каталоге тоже, сортирует их по дате. С этим списком уходит в цикл. Берет первый файл (он будет самым старым), проверяет свободное место на диске D:. Если места больше, чем 2GB, выходит из цикла обхода файлов. Если меньше, удаляет первый файл и принимается за следующий.
Когда закончит с файлами, строит список всех пустых каталогов дерева D:\ispy\video (каталог считается пустым, если на момент его проверки в нем нет ни единого файла или каталога). Для каждого найденного каталога проверяется его имя, и если оно не равно thumbs или grabs, каталог удаляется.
Рекомендация о тестировании остается в силе, как всегда.
первый скрипт по-прежнему помещает вчерашние файлы в сегодняшнюю папку)
второй не удаляет файлы, окно быстро закрывается, такое впечатление что спикок файлов не строит. может опять что-то с include?
но! пустые папки удаляет
Первый скрипт:
$folderName = (get-date).date.ToString("yyyyMMdd")
меняется на
$folderName = (Get-date).Date.AddDays(-1).tostring("yyyyMMdd")
Во втором скрипте строка с удалением файла закомментирована
#Remove-item $file.fullname
второй то же самое(
$files = get-childitem "$rootdir\*" -file -Recurse -include "*.mp4" |
sort Creationtime
меняется на
$files = get-childitem $rootdir -file -Recurse -include "*.mp4" |
sort Creationtime
После этого дебажный вывод у меня прямо говорит, что файлы были найдены и в подкаталогах тоже. И да, сразу вопрос - какая версия powershell на компьютере стоит? Узнать можно, выполнив команду
$host
Похоже, что к 5-й работу -include все же починили, но в ранних нужно использовать костыли. У меня стоит пятая, но при желании можно найти вторую.
версия 3
а можно этими скриптами с общественностью поделиться? наверняка кому-то ещё понадобятся