Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как из папки раскидать все файлы по подпапкам по 10 шт? (https://javascript.ru/forum/events/84054-kak-iz-papki-raskidat-vse-fajjly-po-podpapkam-po-10-sht.html)

mik888em 21.05.2022 15:01

Как из папки раскидать все файлы по подпапкам по 10 шт?
 
Есть папка, в ней много файлов .mp4 Как используя батник (не powershell) внутри папки создать много подпапок и раскидать по подпапкам эти файлы, чтоб в каждой подпапке было не более 10 файлов.

Естественно, что если в папке у нас будет не кратное кол-во .mp4 файлов то в последней подпапке будет закинуто меньше чем 10 файлов.

Данный скрипт делает это, но как указать чтоб скрипт работал с конкретной папкой , т.к. батник лежит рядом с этой главной папкой а не внутри неё?
@Echo Off
If /I Not "%__CD__%"=="%~dp0" PushD "%~dp0" 2>Nul||Exit/B
SetLocal EnableDelayedExpansion
Set "DirN=-1"

:Check_DirN
Set/A "DirN+=1"
If Exist "%DirN%" GoTo Check_DirN
Set "limit=10"
For %%A In (*.bat *.cmd *.mp4) Do (
    If Not Exist "%DirN%" MD "%DirN%"
    If /I Not "%%~nxA"=="%~nx0" RoboCopy . "%DirN%" "%%A" /MOV 1>NUL
    Set/A "limit-=1"
    If !limit! Lss 0 GoTo Check_DirN
)
Echo(Task Done!
Timeout -1 1>Nul

mik888em 21.05.2022 20:03

Нашел решение:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
(for %%i in (*.mov) do (
  md "result_%%~ni"
  ffmpeg.exe -i "%%i" -filter_complex "[0:v]boxblur=40,scale=1080x1920,setsar=1[bg];[0:v]scale=1080:1920:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=y=(H-h)/2" -c:v libx264 -profile:v main -level:v 3.0 -x264-params scenecut=0:open_gop=0:min-keyint=72:keyint=72 -c:a aac -preset slow -crf 23 -r 30 -sn -force_key_frames "expr: gte(t, n_forced * 0.5)" -f segment -segment_time 14.5 -reset_timestamps 1 "result_%%~ni\%%~ni%%03d.mp4"
  if not errorlevel 1 set "FolderName=result_%%~ni" & call :MoveFiles
)) & exit /B
:MoveFiles
set "FolderCount=0"
:FolderLoop
set /A FolderCount+=1
set "SlicesFolder=%FolderName%\Slices_%FolderCount%"
md "%SlicesFolder%"
set "FileCount=0"
for %%j in ("%FolderName%\*.mp4") do (
    setlocal EnableDelayedExpansion
    if !FileCount! == 10 endlocal & goto FolderLoop
    endlocal
    move "%%j" "%SlicesFolder%\" >nul
    set /A FileCount+=1
)
goto :EOF


Часовой пояс GMT +3, время: 14:24.