Если столбец «Дата изменения» действителен, так что вы можете использовать его и не нужно извлекать дату из имени файла, PowerShell обрабатывает System.DateTime
объекты, которые позволяют вывести .Date
- т.е. день без времени.
Шаги могут быть:
- Группировать снимки по дате, поэтому для каждого дня есть группа
- Используйте эту дату +12 часов для времени полудня для каждая группа
- Вычтите дату файла из полуденной даты и возьмите абсолютное значение для удаления знака +/-
- , чтобы получить наименьшее расстояние от полудня
Не проверено, но я думаю, что это правильно, пример PowerShell:
Get-ChildItem -Path 'c:\pictures' |
# group the pictures by day
Group-Object -Property {$_.LastWriteTime.Date} |
# loop over each day-group
ForEach-Object {
# get the day back from the group name, make it midday
$midday = (Get-Date $_.Name).AddHours(12)
# sort the files for that day,
# by closeness to midday,
# pick the nearest 1
# Copy it to ... ? you didn't say where. Some subfolder, I guess
$_.Group | Sort-Object {
[math]::abs(($_.LastWriteTime - $midday).TotalSeconds)} |
Select-Object -First 1
} |
Copy-Item -Destination 'c:\pictures\subfolder' -WhatIf
}
Вам нужно будет удалить -WhatIf
, чтобы заставить его действительно делать что-то, и изменить copy-item
на move-item
чтобы заставить его шифровать ваши данные.