CMD/BAT - [решено] Пакетная обработка звуковых файлов со схожими именами

Ответить
Аватара пользователя
n4yk

CMD/BAT - [решено] Пакетная обработка звуковых файлов со схожими именами

Сообщение n4yk »

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



Файлы в папке выглядят так:

2014_10_01_00_23_26_250_1030.wav2014_10_01_00_23_26_250_2001.wav2014_10_01_00_26_27_937_1030.wav2014_10_01_00_26_27_937_2001.wav2014_10_01_00_26_44_906_1030.wav2014_10_01_00_26_44_906_2001.wav



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



Пример группы файлов:2014_10_01_00_23_26_250_1030.wav2014_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

Re: CMD/BAT - [решено] Пакетная обработка звуковых файлов со схожими именами

Сообщение n4yk »

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



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 : '');
Ответить

Вернуться в «Скриптовые языки администрирования Windows»