Компьютерный форум 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=307129)

n4yk 26-10-2015 13:02 2568276

Пакетная обработка звуковых файлов со схожими именами
 
Здравствуйте, пытаюсь написать скрипт для массовой обработки звуковых файлов и последующего складывания этих файлов в отдельной директории:

Файлы в папке выглядят так:
  • 2014_10_01_00_23_26_250_1030.wav
  • 2014_10_01_00_23_26_250_2001.wav
  • 2014_10_01_00_26_27_937_1030.wav
  • 2014_10_01_00_26_27_937_2001.wav
  • 2014_10_01_00_26_44_906_1030.wav
  • 2014_10_01_00_26_44_906_2001.wav


Нужно разбить это список на группы по 2 файла и передать их в утилиту для склейки звуковых файлов.

Пример группы файлов:
  • 2014_10_01_00_23_26_250_1030.wav
  • 2014_10_01_00_23_26_250_2001.wav

В обоих файлах отличается только последние цифры перед расширением (т.е. файлов начинающихся на "2014_10_01_00_23_26_250_" гарантировано будет только 2)

Команда для этих файлов выглядит как sox.exe -v 2.0 -m %файл_один% %файл_два% -C 48.99 converted/файл_один.mp3 highpass 10 2

Удалось только написать bat-файл для обработки 2х файлов Drag&Drop'ом, но файлов тысячи и обработка по 2 файла вручную очень муторно, направьте плиз в нужную сторону, решение подойдет любое - bat, vbs и т.д.
Спасибо.

Текущий скрипт:

Код:

@echo off
cd %~dp0
@mkdir converted 2> nul
@mkdir source 2> nul
%~dp0\..\sox.exe -v 2.0 -m %1 %2 -C 48.99 converted/%~n1.mp3 highpass 10 2
@move %1 source/%~nx1 1> nul
@move %2 source/%~nx2 1> nul

echo [OK] Файл %~nx1 и %~nx2 успешно склеены в файл /converted/%~n1.mp3
pause


n4yk 26-10-2015 18:04 2568389

Вобщем пока ждал ответа, сам разобрался, всем спасибо.

P.S. Если кому нужен аналог, готовый код: (с возможностью выбора папки через стандартный Windows-диалог)

Код:

@if (@a==@b) @end /*

:: batch portion

@echo off
setlocal
ECHO ЗАПУСК...
ECHO.
ECHO Выберите папку с записями:
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0"') do (
    cd /d %%I
        set zapisi=%%I
)
IF "!zapisi!"=="" (
echo Вы не выбрали папку с записями.
) else (
rem cd %~dp0
@mkdir converted 2> nul
@mkdir source 2> nul
Setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir /b /s /a-d "*.wav"') do (
        Set File=%%i
        For /F "delims=" %%A In ("!File!") Do (
                For /F "tokens=1,2,3,4,5,6,7,8,9 delims=_" %%B In ("%%~nA") Do (
                        Set Name=%%B_%%C_%%D_%%E_%%F_%%G_%%H_
                )
        )
        for /f "delims=" %%k in ('dir /b /s /a-d "!Name!*.wav"') do (
                IF "!file1!"=="" (
                        set file1=%%k
                        ) else (
                        set file2=%%k
                        )
        )
        if exist !file1! (
                if exist !file2! (
                        for %%a in (!file1!) do set file1name=%%~na
                        for %%a in (!file2!) do set file2name=%%~na
                        %~dp0\sox.exe -v 2.0 -m !file1! !file2! -C 48.99 converted\!file1name!.mp3 highpass 10 2 2>nul
                        move /Y !file1! source\!file1name!.wav 1> nul
                        move /Y !file2! source\!file2name!.wav 1> nul
                        echo [OK] Saved to "\converted\!file1name!.mp3"
                )
        )
        set file1=
        set file2=
)
start explorer.exe !zapisi!
echo ВСЕ ЗАПИСИ УСПЕШНО СКОНВЕРТИРОВАНЫ
)
pause
goto :EOF

:: JScript portion */

var shl = new ActiveXObject("Shell.Application");
var folder = shl.BrowseForFolder(0, "Please choose a folder.", 0, 0x00);
WSH.Echo(folder ? folder.self.path : '');



Время: 05:55.

Время: 05:55.
© OSzone.net 2001-