Преобразование аудио: циклы вложения в пакетный файл не дают результата

Я конвертирую пару тысяч файлов .wem в формат .wav. Поскольку .wem — малоизвестный формат файлов, я решил конвертировать файлы с помощью SoX.

Стандартная установка SoX включает пакетный файл для использования с массовым преобразованием необработанных файлов, который я с удовольствием использовал. Я изменил пример, чтобы исключить необходимость перетаскивания файлов в пакетный файл с помощью вложенных циклов.

cd %~dp0
mkdir converted
for %%f in (*.wem) do FOR %%A IN (%*) DO sox -t raw -e signed-integer -b 16 -c 1 -r 44100 %%A "converted/%%~nA.wav"
pause

Он прекрасно создает каталог /converted, а затем продолжает выводить команду, каталог, а затем переходит (предположительно) к следующему файлу. К сожалению, открытие каталога /converted показывает, что вообще ничего не было сгенерировано, и преобразование заняло гораздо меньше времени, чем должно было. Я тестировал его с файлами .wem ранее, и он отлично конвертируется, поэтому я не думаю, что это имеет какое-либо отношение к формату. Скорее всего, это как-то связано с моим любительским программированием пакетных файлов. Есть идеи?


person WAUthethird    schedule 30.12.2018    source источник
comment
FOR %%A IN (%%f) DO.. но я не понимаю, зачем вам нужны два цикла for, когда это можно сделать в одном цикле.   -  person Gerhard    schedule 30.12.2018
comment
Как мне реализовать его в одном цикле? Есть несколько условных выражений, и их можно передавать только в нескольких циклах, верно?   -  person WAUthethird    schedule 30.12.2018
comment
Первая строка должна быть cd "%~dp0", чтобы работать также с путем к пакетному файлу, содержащим &. Цикл FOR должен быть for %%I in (*.wem) do sox.exe -t raw -e signed-integer -b 16 -c 1 -r 44100 "%%I" "converted\%%~nI.wav", если sox — это файл с расширением .exe. В противном случае, если sox имеет расширение файла .bat или .cmd, замените sox.exe на call sox.bat соответственно call sox.cmd.   -  person Mofi    schedule 30.12.2018


Ответы (1)


Решено благодаря Mofi.

Готовый код:

cd %~dp0
mkdir converted
for %%I in (*.wem) do sox -t raw -e signed-integer -b 16 -c 1 -r 44100 "%%I" "converted\%%~nI.wav"
pause

Кажется, я действительно мог бы сделать это за один цикл.

person WAUthethird    schedule 30.12.2018
comment
Смотрите .. Сингл для цикла :) - person Gerhard; 30.12.2018