Любой способ отфильтровать все файлы в течение указанного времени? - PullRequest
2 голосов
/ 30 января 2020

У меня есть почти 500 тыс. Файлов видеонаблюдения в другой папке на диске X, и мне нужно удалить все из них с указанием c времени, например, с 12:00 до 6:00, но оставляя оставшиеся вне зависимости от даты. Как мне это сделать? Я попытался использовать для файлов, но, похоже, фильтрует файлы только на день и время также неверно, так как он в основном не показывает файлы в течение определенного времени.

Для PowerShell я получил это:

Get-ChildItem -Path c:\your\path\here -Recurse |
  Where-Object -FilterScript { $_.LastWriteTime -ge (Get-Date).AddHours(-2) }

но не знаете, как его изменить, чтобы получить список файлов только с 12:00 до 6:00.

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Попробуйте это. Он использует TimeSpans для фильтрации файлов с полуночи до 6 часов утра:

$timeAfter  = New-TimeSpan -Hours 0 -Minutes 0 -Seconds 0
$timeBefore = New-TimeSpan -Hours 6 -Minutes 0 -Seconds 0

Get-ChildItem -Path 'X:\TheFolder' -Filter '*.CCTV' -File -Recurse | 
    Where-Object { $_.LastWriteTime.TimeOfDay -gt $timeAfter -and $_.LastWriteTime.TimeOfDay -lt $timeBefore} |
    Remove-Item -WhatIf

После того, как информация, отображаемая в консоли, будет удовлетворена, удалите переключатель -WhatIf

2 голосов
/ 30 января 2020

Я думаю, что это может быть полезно. Он проверяет, является ли LastWriteTime.Hour больше 0 (12 часов), но меньше 6 (6 часов утра):

Get-ChildItem -Path c:\path -Recurse | 
    Where-Object { $_.LastWriteTime.Hour -gt 0 -and $_.LastWriteTime.Hour -lt 6}
...