Имя: Пароль:
IT
Админ
Автоматическое удаление файлов по расписанию
,
0 Gera1t
 
05.07.23
11:03
Здравствуйте!
Подскажите пожалуйста программу или текст скрипта для автоматического удаления файлов по расписанию.
Но что бы он не просто удалял все файлы старше определенной даты, а что бы еще оставлял файл с последней датой каждого месяца.
1 Aleksey
 
05.07.23
11:06
напиши на 1С
2 Gera1t
 
05.07.23
11:13
(1) Отличная мысль
3 Gera1t
 
05.07.23
11:14
Есть такой функционал в программе Обновлятор 1С, но только в платной версии, хотелось бы сделать это штатными средствами Windows, каким то скриптом.
4 lodger
 
05.07.23
11:15
(3) ты видел сколько оно стоит? больше времени(=денег) потратишь на изобретение и поддержку велосипеда, чем купить лаконичную и подходящую для задачи тулзу.
5 Gera1t
 
05.07.23
11:36
(4) Согласен, что стоит не дорого, но там есть нюансы, во-первых лицензия одноразовая, во-вторых на каждую винду нужно покупать заново, а если машин много, тем более если это виртуалки, то придет покупать много лицензий.
6 Галахад
 
гуру
05.07.23
11:38
Напиши на oscript
7 Грю
 
05.07.23
18:01
(0) На чем умеешь программировать? На том и напиши. Проще всего на JS наверное, или на cmd. Или может PowerShell знаешь
8 ДедМорроз
 
05.07.23
20:57
Можно powershell и планировщик windows соединить и получится то,что хочется.
9 lodger
 
06.07.23
00:07
(5) выдели тачку для регламентных операций и не тыркай на ней ось туда-сюда.
10 Грю
 
06.07.23
05:20
(0) напиши на бейсике
11 DJ Anthon
 
06.07.23
05:33
https://files.fm/u/cuvqsxfax

когда-то давно Abrahams выкладывал скрипты, я их под себя доделал
удачи в разборе кода ) бэкапер заточен под 1С, но и просто папки тоже архивирует, там сможешь найти код, который оставляет последний файл, вернее 10 последних.
12 NorthWind
 
06.07.23
07:25
(0) если нужно, могу написать по вашему ТЗ за скромное вознаграждение. Язык VBS. vxpol78 на гмейл.ком
13 abibas
 
06.07.23
09:43
Делал для себя скрипт на vbs, в т.ч. и для этого. Ниже описание, если надо, на почту скину

'****** Скрипт удаляет файлы и пустые подпапки в нужной папке (кроме заблокированных)

'****** Параметры:
'****** /DestFolder:X
'****** где X - папка, которую надо очистить (строка, указывается в кавычках). Обязательный параметр.

'****** /Period:X
'****** где X - кол-во дней, старше которого нужно удалять файлы (число). Необязательный параметр (по умолчанию -1).
'****** Возможные значения:
'****** X < 0 - будут удалены все файлы.
'****** X >= 0 - будут удалены файлы с датой создания старше X дней.

'****** /DelEmptyFolders:X
'****** где X - удалять пустые папки. Необязательный параметр (по умолчанию 0).
'****** Возможные значения:
'****** 1 - удалять, 0 - нет.

'****** /SaveLastFileInFolder:X
'****** где X - оставлять один файл в каждой папке. Необязательный параметр (по умолчанию 0).
'****** Возможные значения:
'****** 1 - оставлять самый старый, 2 - оставлять самый новый, 0 - нет.

'****** /Debug
'****** показать строку вызова скрипта с параметрами без выполнения. Необязательный параметр.

'***** /LogName:X
'****** где X - имя лог-файла. Необязательный параметр (по умолчанию -  имя этого скрипта с расширением log.

'****** Пример 1: wscript путь_имя_этого_скрипта.vbs /DestFolder:"D:\Common" /Period:5 /DelEmptyFolders:1 /SaveLastFileInFolder:1 - будут удалены файлы старше 5 дней кроме самого старого файла в каждой подпапке и пустые подпапки в папке D:\Common
'****** Пример 2: wscript путь_имя_этого_скрипта.vbs "D:\Common" -1 - будет полностью очищена папка D:\Common
14 Грю
 
07.07.23
18:09
Напиши на bash и запуская в wsl2
15 Злопчинский
 
07.07.23
19:01
Мне кажется что для стандартного ссисадмина это рядовая задача.
16 Dimma
 
07.07.23
23:03
Вот строка стандартного bat файла
удаляет все *.tmp в папке и подпапках n:\Dropbox\ старше 10 дней

FORFILES /P n:\Dropbox\ /S /M *.tmp /D -10 /C "cmd /c del @path /q"

а уж запускать его по расписанию каждый школьник может
17 vbus
 
07.07.23
23:21
(0) А почему оставлять последний день месяца?, последний день у разных месяцев разный, а первый всегда 1 число.
18 Злопчинский
 
07.07.23
23:26
последний день в базе закртие месяца
19 Злопчинский
 
07.07.23
23:27
правда нечасто в базе в последний день месяца делается все для последнего дня месяца...
20 Грю
 
09.07.23
00:13
(16) Не подходит. Нужно оставлять последний файл каждого месяца.
21 Anchorite
 
09.07.23
06:08
(16) Поддерживаю, forfiles + cmd + schtasks будет вполне достаточно для данной задачи.

(20) Всё там подходит. Если немного подумать, то не составит труда ПЕРЕД запуском данного скрипта выполнять условие по проверке последнего дня месяца. Если день последний, тогда аналогичной командой просто перемещать сегодняшний файл в другую папку. А потом уже удалять всё, что старше определённой границы. Всё будет в точности так, как нужно ТС. Единственный нюанс — в cmd работа с датами корявенько реализована, поэтому на чистом cmd небольшая простынка говнокода получится (в основном, из-за дурацкого февраля, который то 28, то 29), но в целом ничего страшного. Ну, или как вариант немного погуглить и дополнительно использовать vbs или powershell.
22 Anchorite
 
09.07.23
06:15
(21) ->> "Если немного подумать...
------>> "... на чистом cmd небольшая простынка говнокода получится (в основном, из-за дурацкого февраля, который то 28, то 29)"

А если ещё немного подумать, то задачу по определеню _последнего_ дня месяца можно выполнять в _первый_ день месяца, который всегда одинковый, — и просто при помощи forfiles перемещать _вчерашний_ файл, — тогда и говнокода будет существенно меньше.
23 Anchorite
 
09.07.23
06:59
(22) ---> "говнокода будет существенно меньше"

А можно и вовсе почти без говнокода обойтись, тупо через планировщик каждый день выполнять:
FORFILES /P n:\Dropbox\ /S /M *.tmp /D -10 /C "cmd /c del @path /q"
, и плюс первого числа каждого месяца перед запуском первого задания делать:
FORFILES /P n:\Dropbox\ /S /M *.tmp /D -1 /C "cmd /c move @path n:\newdir\"
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс