Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Подсчёт объёма файлов старше определенной даты (http://forum.oszone.net/showthread.php?t=354672)

dmitryst 11-12-2023 08:51 3021374

Подсчёт объёма файлов старше определенной даты
 
Коллеги, приветствую!
Дано:
Сервер 2016 с рабочей папкой, скажем, "D:\Work". Папка довольно большого объёма, для бэкапов уже неподъёмная, практически. Решено скинуть файлы (с помощью robocopy или pshell скрипта, это неважно) на отдельный диск, но как узнать объем этих файлов? Методом тыка на диск 1Тб не влезает.
Надо: прошу помощи, как определить объем файлов старше 5 лет, например, скриптом? Лучше через Powershell, но и обычный cmd тоже сойдет (на аналогичном сервере под *nix всё сделал, можно сказать, штатными средствами, а тут затык...)

NickM 11-12-2023 09:23 3021377

Не оно ли?

Как узнать размер папок на диске с помощью PowerShell?
Цитата:

Вы можете использовать фильтры для выбора файлов, которые нужно учитывать при расчете размера. Например, вы можете посчитать размер файлов, созданных за 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 3021378

Цитата:

Цитата NickM
$_.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 3021379

Я пытался делать так:
Код:

(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.

Цитата:

Цитата DJ Mogarych
1 января и 31 декабря не попадут в выборку. »

Ну, с lt / le и gt / ge проблем нет :up

Спасибо за подсказку!
ПС. В конец скрипта добавил
Код:

$host.ui.RawUI.ReadKey(6)|out-null
чтобы окно не закрывалось.


Время: 14:27.

Время: 14:27.
© OSzone.net 2001-