Пакетная обработка нескольких файлов в нескольких папках - PullRequest
0 голосов
/ 16 мая 2011

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

cd %~dp0
mkdir converted
FOR %%A IN (%*) DO sox %%A -c 1 "converted/%%~nxA" mixer -1
pause

Это позволяет мне перетаскивать файлы, но не целые папки.Все, что мне действительно нужно, это подняться на уровень.Как вы уже догадались, у меня очень мало знаний о пакетной обработке, поэтому объяснение будет очень полезным.

Спасибо за ваше время!

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Вам необходимо проверить, является ли переданное имя файлом, каталогом или ничем. Вы можете попробовать этот код и адаптировать его под свои нужды

FOR %%a IN (%*) DO (
  IF EXIST %%~sa\NUL  (
   echo %%~fa is a directory
 ) else (
   IF EXIST %%a (
     echo %%~fa is a file
   ) else (
     echo %%~a does not exist
   ) 
 )
)
0 голосов
/ 17 мая 2011

Мне удалось адаптировать этот файл для использования вложенных циклов for, чтобы выполнить то, что я хотел:

cd %~dp0
mkdir converted
FOR /d %%A IN (*) DO (
    IF EXIST %%A/*.mp3 (
        cd converted
        mkdir %%~nxA
        cd ..
    )   
    cd %%A
    For %%B IN (*.mp3) DO (
        cd ..
        sox "%%A\%%~nxB" -c 1 "converted/%%~nxA/%%~nxB" mixer -1
        cd %%A
    )
    cd ..
)
pause

Код теперь ищет каждый каталог в папке с командным файлом, затем вводит каталоги и обрабатывает файлы внутри.

...