Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скрипт для сортировки файлов по папкам (http://forum.oszone.net/showthread.php?t=349244)

eeeeg@vk 21-07-2021 12:11 2962580

Скрипт для сортировки файлов по папкам
 
Вложений: 1
Добрый день, помогите пожалуйста, нужен скрипт сортирующие файлы по папкам, есть куча видео, все они имеют название состоящее из частей:
ch01 - 01 это номер камеры с которой снято видео (камер всего 8), дальше идет дата и время (и дата и время могут меняться, но неизменно то, что видео с однинаковой датой и временем ровно 8:

ch01_20210712211220_WMV V9.wmv
ch01_20210712212213_WMV V9.wmv
ch01_20210712212126_WMV V9.wmv
.....................................................
ch02_20210712212420_WMV V9.wmv


Нужно чтобы скрипт брал видео с одинаковым временем и сортировал в папки (должно получиться 8 видео), то есть в папке должно быть так как в примере ниже
ch01_20210712212420_WMV V9.wmv
ch02_20210712212420_WMV V9.wmv
ch03_20210712212420_WMV V9.wmv
.....................................................
ch08_20210712212420_WMV V9.wmv

Для понимания приложил архив с тестовыми файлами. Заранее спасибо

YuS_2 21-07-2021 13:18 2962583

Цитата:

Цитата eeeeg@vk
чтобы скрипт брал видео с одинаковым временем и сортировал в папки (должно получиться 8 видео) »

powershell
Код:

$in = '.\тест'
$out = '.\out\'
$filter = '*.wmv'
dir $in -filter $filter -file|%{
        $tmp = $out + ($_.basename -split '_')[1]
        if (!(test-path $tmp)){md $tmp|out-null}
        mi $_.fullname $tmp
}


megaloman 21-07-2021 13:44 2962584

Цитата:

Цитата eeeeg@vk
Нужно чтобы скрипт брал видео с одинаковым временем и сортировал в папки »

Если под "сортировал" подразумеваем "скопировал", то возможно так:
Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In\ТЕСТ"
        Set "Mask=ch??_20????????????_WMV V9.wmv"
       
        Set "BoxOut=Z:\Box_Out"

        FOR /F "usebackq tokens=1,2* delims=_" %%i IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D`) DO (
                If Not Exist "%BoxOut%\%%j\%%i_%%j_%%k" >nul Xcopy /D "%BoxIn%\????_%%j_%%k" "%BoxOut%\%%j\"
        )
Pause
Exit /B

Если под "сортировал" подразумеваем "переместил", то возможно так:
Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In\ТЕСТ"
        Set "Mask=ch??_20????????????_WMV V9.wmv"
       
        Set "BoxOut=Z:\Box_Out"

        FOR /F "usebackq tokens=1,2* delims=_" %%i IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D`) DO (
                If Exist "%BoxIn%\%%i_%%j_%%k" (
                        2>nul Md "%BoxOut%\%%j"
                        >nul Move "%BoxIn%\????_%%j_%%k" "%BoxOut%\%%j\"
                )
        )
Pause
Exit /B

Если в путях есть кириллица, то сохранить в 866 кодировке.


Время: 12:24.

Время: 12:24.
© OSzone.net 2001-