Показать полную графическую версию : [решено] Подсчёт объёма файлов старше определенной даты
dmitryst
11-12-2023, 08:51
Коллеги, приветствую!
Дано:
Сервер 2016 с рабочей папкой, скажем, "D:\Work". Папка довольно большого объёма, для бэкапов уже неподъёмная, практически. Решено скинуть файлы (с помощью robocopy или pshell скрипта, это неважно) на отдельный диск, но как узнать объем этих файлов? Методом тыка на диск 1Тб не влезает.
Надо: прошу помощи, как определить объем файлов старше 5 лет, например, скриптом? Лучше через Powershell, но и обычный cmd тоже сойдет (на аналогичном сервере под *nix всё сделал, можно сказать, штатными средствами, а тут затык...)
Не оно ли?
Как узнать размер папок на диске с помощью PowerShell? (https://winitpro.ru/index.php/2018/07/24/poluchit-razmer-papok-powershell/#:~:text=%D0%94%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%80%D0%B0% D0%B7%D0%BC%D0%B5%D1%80%D0%BE%D0%B2%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B8,%D0%B0%20%D0%B2% D1%82%D0%BE%D1%80%D0%BE%D0%B9%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%20%D0%B0%D1%8 0%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5%20%D0%B4%D0%B5%D0%B9%D1%81 %D1%82%D0%B2%D0%B8%D0%B5.)
Вы можете использовать фильтры для выбора файлов, которые нужно учитывать при расчете размера. Например, вы можете посчитать размер файлов, созданных за 2020 год
(gci -force c:\ps –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’}| measure Length -s).sum / 1Gb
DJ Mogarych
11-12-2023, 09:43
$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’ »
1 января и 31 декабря не попадут в выборку.
Удобнее, если речь идёт о 2020 годе, так:
(dir 'D:\Downloads' -file |? {$_.CreationTime.Year -eq 2020} |measure length -Sum).Sum / 1GB
Если "старше 5 лет", то
{$_.CreationTime -lt (get-date).AddYears(-5)}
Также, желательно определиться, какой именно критерий учитывать - CreationTime или LastWriteTime.
dmitryst
11-12-2023, 10:03
Я пытался делать так:
(Get-ChildItem -Path $path -Recurse | Where-Object {$_.LastAccessTime -le $date} | measure Length -s).sum / 1Gb
Скрипт выдавал нулевой результат (если заменить на LastWriteTime, то тоже работает)
Теперь работает так:
$date = (Get-Date).AddYears(-5)
$path = "D:\Work"
(gci -force $path -Recurse -ErrorAction SilentlyContinue | ? {$_.LastWriteTime -lt $date}| measure Length -s).sum / 1Gb
В моём случае всё-таки LastWriteTime вместо CreationTime.
1 января и 31 декабря не попадут в выборку. »
Ну, с lt / le и gt / ge проблем нет :up
Спасибо за подсказку!
ПС. В конец скрипта добавил
$host.ui.RawUI.ReadKey(6)|out-null
чтобы окно не закрывалось.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.