Powershell, с настраиваемым количеством файлов в конечной папке и разницей в секундах. Вроде работает.
Код:
$src = 'C:\temp\from\photo*.jpg'
$dest = 'C:\temp\to'
$sec = 2 # максимально допустимая разница в секундах
$quantity = 3 # максимальное число файлов в конечных папках
function Get-Folder ($name) {
$name -replace '^.*@'
}
function Get-Time ($name) {
[datetime]::parseexact("$(Get-Folder $name)", 'dd-MM-yyyy_HH-mm-ss', $null)
}
$files = dir $src |sort {Get-Time $_.basename}
$filesNum = $files.count - 1
0..$filesNum |% {
if (-not $continuationToken) {
$f = "$dest\$(Get-Folder $files[$_].basename)"
mkdir $f -ErrorAction SilentlyContinue > $null
}
mv $files[$_] $f
$counter++
#"Файл $($files[$_].name) перенесён в $f"
if ($filesNum -eq $_) {break} # Чтобы не было ошибки на последнем файле
$nextSec = ((Get-Time $files[$_+1].basename) - (Get-Time $files[$_].basename)).totalseconds
#"Сек: $nextsec/$sec, кол-во: $counter/$quantity"
if ($nextSec -le $sec -and $counter -lt $quantity) {
#"Токен выдан`n"
$continuationToken = 1
}
else {
#"Токен не выдан`n"
$continuationToken,$counter = $null
}
if ($counter -ge $quantity) {$counter = $null}
}
Пример со включённым логированием (в коде закомментировано) и с настройкой $sec = 3, $quantity = 4
Код:
Файл photo_4362@30-06-2024_18-07-01.jpg перенесён в C:\temp\to\30-06-2024_18-07-01
Сек: 1/3, кол-во: 1/4
Токен выдан
Файл photo_4343@30-06-2024_18-07-02.jpg перенесён в C:\temp\to\30-06-2024_18-07-01
Сек: 0/3, кол-во: 2/4
Токен выдан
Файл photo_4344@30-06-2024_18-07-02.jpg перенесён в C:\temp\to\30-06-2024_18-07-01
Сек: 28/3, кол-во: 3/4
Токен не выдан
Файл photo_4345@30-06-2024_18-07-30.jpg перенесён в C:\temp\to\30-06-2024_18-07-30
Сек: 0/3, кол-во: 1/4
Токен выдан
Файл photo_4346@30-06-2024_18-07-30.jpg перенесён в C:\temp\to\30-06-2024_18-07-30
Сек: 1/3, кол-во: 2/4
Токен выдан
Файл photo_4347@30-06-2024_18-07-31.jpg перенесён в C:\temp\to\30-06-2024_18-07-30
Сек: 88/3, кол-во: 3/4
Токен не выдан
Файл photo_4348@30-06-2024_18-08-59.jpg перенесён в C:\temp\to\30-06-2024_18-08-59
Сек: 1/3, кол-во: 1/4
Токен выдан
Файл photo_4349@30-06-2024_18-09-00.jpg перенесён в C:\temp\to\30-06-2024_18-08-59
Сек: 1/3, кол-во: 2/4
Токен выдан
Файл photo_4350@30-06-2024_18-09-01.jpg перенесён в C:\temp\to\30-06-2024_18-08-59
Сек: 0/3, кол-во: 3/4
Токен выдан
Файл photo_4351@30-06-2024_18-09-01.jpg перенесён в C:\temp\to\30-06-2024_18-08-59
Сек: 54259201/3, кол-во: 4/4
Токен не выдан
Файл photo_4352@20-03-2026_18-09-02.jpg перенесён в C:\temp\to\20-03-2026_18-09-02
Полученная структура
Код:
C:\TEMP\TO
+---20-03-2026_18-09-02
¦ photo_4352@20-03-2026_18-09-02.jpg
¦
+---30-06-2024_18-07-01
¦ photo_4343@30-06-2024_18-07-02.jpg
¦ photo_4344@30-06-2024_18-07-02.jpg
¦ photo_4362@30-06-2024_18-07-01.jpg
¦
+---30-06-2024_18-07-30
¦ photo_4345@30-06-2024_18-07-30.jpg
¦ photo_4346@30-06-2024_18-07-30.jpg
¦ photo_4347@30-06-2024_18-07-31.jpg
¦
L---30-06-2024_18-08-59
photo_4348@30-06-2024_18-08-59.jpg
photo_4349@30-06-2024_18-09-00.jpg
photo_4350@30-06-2024_18-09-01.jpg
photo_4351@30-06-2024_18-09-01.jpg
Проблема только в том, что если будет очень много файлов с совершенно одинаковым временем, то скрипт будет превышать максимально заданное количество файлов в одной папке. Но это уже другая задача, и вряд ли она актуальна для этого случая.