Ниже кода предполагается, что есть папки folder_a
и folder_b
. Ваши изображения находятся в folder_a
, и код переместит эти изображения в folder_b\folder_1\...
, folder_b\folder_2\...
, folder_b\folder_3\...
et c. Измените эти имена каталогов в соответствии с вашими требованиями. Запустите его в folder_a
, и он будет работать.
$split_at = 5000
# First, create the directories to store the images
$image_count = Get-ChildItem -File | Measure-Object | Select-Object -ExpandProperty Count
1..[math]::Ceiling($image_count/$split_at) | %{New-Item -Name "folder_$($_)" -ItemType Directory -Path "..\folder_b"}
# Then move the images in batch to the destination directories
$folder_n = 1
while(Test-Path .\*) {
Get-ChildItem | select -First $split_at | Move-Item -Destination "..\folder_b\folder_$($folder_n)" -Force
$folder_n++
}
Тесты
Я сравнил свой код с кодом Мануэля Батшинга. Оказывается, мой код работает быстрее. Ниже приведен код тестирования и результат. Здесь я создал 2999 файлов изображений каждый раунд и переместил их с folder_a
на folder_b
(что находится на том же уровне в файловой системе).
Remove-Item -Path ..\folder_b\* -Force -Recurse
1..2999 | %{New-Item -Name "item $_.jpg"}
Measure-Command {
$split_at = 43
# First, create the directories to store the images
$image_count = Get-ChildItem -File | Measure-Object | Select-Object -ExpandProperty Count
1..[math]::Ceiling($image_count/$split_at) | %{New-Item -Name "folder_$($_)" -ItemType Directory -Path "..\folder_b"}
# Then move the images in batch to the destination directories
$folder_n = 1
while(Test-Path .\*) {
Get-ChildItem | select -First $split_at | Move-Item -Destination "..\folder_b\folder_$($folder_n)" -Force
$folder_n++
}
}
Remove-Item -Path ..\folder_b\* -Force -Recurse
1..2999 | %{New-Item -Name "item $_.jpg"}
Measure-Command {
$i = 1
while (($files = Get-ChildItem *.jpg, *.jpeg).Count -gt 0)
{
$folderPath = "..\folder_b\folder_$($i)"
New-Item -Type Directory $folderPath
$files | Select-Object -First 43 | Move-Item -Destination $folderPath
$i += 1
}
}
Результат (Мой код):
Days : 0
Hours : 0
Minutes : 0
Seconds : 7
Milliseconds : 632
Ticks : 76323557
TotalDays : 8.83374502314815E-05
TotalHours : 0.00212009880555556
TotalMinutes : 0.127205928333333
TotalSeconds : 7.6323557
TotalMilliseconds : 7632.3557
Результат (Мануэль Батшинг):
Days : 0
Hours : 0
Minutes : 0
Seconds : 13
Milliseconds : 961
Ticks : 139616227
TotalDays : 0.000161592855324074
TotalHours : 0.00387822852777778
TotalMinutes : 0.232693711666667
TotalSeconds : 13.9616227
TotalMilliseconds : 13961.6227