![]() |
Удаление старых файлов-папок по дате изменения (change time)
Приветствую. Долго рылся в поисках решения, но в итоге потерпел фиаско.
Суть проблемы. Есть временная папка, куда сбрасывается разный хлам. Нужно рекурсивно удалять старые файлы/папки, например старше 30 дней. Таких скриптов-программ полно. Проблема в том, что если извлечь файл из архива, дата создания-изменения-открытия выставляются из архива. Единственная дата, на которую можно ориентироваться, называется "Время изменения" (Change Time). В стандартном проводнике она не выводится, тем не менее, посмотреть её можно, например в фаре: Скрытый текст
![]() Как видно, первые три даты в прошлом, и только последняя отражает текущее время создания файла. Поскольку я довольно часто работаю с архивами, удаление мусора внезапно стало проблемой. Перерыл кучу скриптов. Forfiles.exe работает не с той датой. PowerShell, похоже, умеет только вот эти даты, и это первые три даты со скрина. Попробовал даже линуксовый find из cygwin, но он видимо вообще не умеет работать с NTFS датами файлов. Подскажите, как можно работать с такой датой? |
Цитата:
![]() Цитата:
Цитата:
Цитата:
Код:
CreationTime,CreationTimeUtc,LastAccessTime,LastAccessTimeUtc,LastWriteTime,LastWriteTimeUtc Цитата:
|
Цитата:
Вот тот же файл в проводнике ![]() Как видите, нигде нет 08.01.2019 Цитата:
![]() Код:
$_.Name + "`t`t" + $_.CreationTime + "`t" + $_.LastWriteTime + "`t" + $_.LastAccessTime Цитата:
|
Цитата:
Цитата:
Цитата:
А удалить файлы по параметру времени последнего изменения: Код:
$fld = 'd:\путь к временному каталогу' Код:
dir -lit $fld -dir -rec -force|?{(dir -lit $_.fullname -file -rec).length -eq 0}|del -rec -force |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Пояснения
Особо не разбирался... но FF выдал:
Цитата:
Цитата:
Если бы проблема была у меня, мне, возможно, было бы интересно разобраться в возникающих ошибках, а так... |
Цитата:
Код:
install-module psbasicinfo Код:
(gi filename.ext|get-itembasicinfo).changetime |
Цитата:
|
|
Цитата:
Цитата:
Цитата:
Код:
@Echo Off |
Цитата:
И к тому же, forfiles работает с обычным lastWriteTime, то бишь, при всём желании, ChangeTime в cmd достать не так просто... |
YuS_2, Уже увидел и подправил код, чтобы не удалился исходный каталог. Rd без ключей /s /q не удалит непустой каталог.
Цитата:
|
Цитата:
Код:
... do >nul 2>&1 rd %%i |
Цитата:
|
YuS_2, До сих пор считал, что у файла 3 временнЫх атрибута (По крайней мере, доступных в WSH):
Дата создания (DateCreated) Дата доступа (DateLastAccessed) Дата изменения (DateLastModified) |
Цитата:
Вот, выше, коллега Iska, приводил пруфлинки... Цитата:
Код:
$fld = 'd:\путь к временному каталогу' |
Всем спасибо, скрипт работает как надо
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Время: 14:02. |
Время: 14:02.
© OSzone.net 2001-