Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как перекидывать много файлов в нужные мне папки&

Ответить
Настройки темы
CMD/BAT - [решено] Как перекидывать много файлов в нужные мне папки&

Новый участник


Сообщения: 11
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Изображения
Тип файла: jpg Снимок.jpg
(409.1 Kb, 12 просмотров)
Вложения
Тип файла: txt скрипт.txt
(254 байт, 2 просмотров)
Здравствуйте! Помогите пожалуйста.
В папке находится около 4 тыс фото и нужно, что бы каждые 3 фотографии перекидывались в 1 папку.
Приложил скрин, там схематично указал что я имею ввиду. Возможно ли такое сделать каким либо способом?
У меня уже имеется скрипт который перекидывает 1 файл только в 1 папку. Как раз помогли на этом форуме. Возможно из него получится сделать перекидку по 3 фото в 1 папку? Приложил его так же файлом и текстом ниже.

@setlocal enabledelayedexpansion&chcp 1251>nul
@set "d=bla bla"

@for %%i in (*.*) do @(
>nul robocopy . "!d!!s!" "%%i" /mov /ndl /nfl /njh /njs /xf "%~nx0"
set/a c+=1&if !c! geq 2 (set "s= — копия (!c!)") else set "s= — копия"
)

Отправлено: 20:11, 04-07-2024

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6581
Благодарности: 1511

Профиль | Отправить PM | Цитировать


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 10-07-2024 в 18:05. Причина: DRY

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:28, 10-07-2024 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как перекидывать много файлов в нужные мне папки&

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] назначить нужные права на папки в каталоге batyaPS Скриптовые языки администрирования Windows 25 14-09-2014 12:04
Установка - [решено] Обновления от Microsoft: нужные, не нужные. Польза или вред. flev45 Microsoft Windows 7 18 29-09-2010 13:05
[решено] Как вытянуть из диструбива windows xp нужные мне программы VALIK1994 Автоматическая установка Windows 2000/XP/2003 3 29-08-2009 01:44
Vista / 2008 - Как удалить не нужные мне приложения? njg Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 3 03-07-2009 15:44




 
Переход