2015-11-20 4 views
1

Я пытаюсь сделать рутину в партии Windows, которая будет запускать «sox.exe» в каждом файле OGG в указанной директории. У меня в настоящее время проблема, что правильно не обрабатывать пути, а тем более, выполнять операцию правильно. Если я запускаю команду вручную, в окне терминала, для каждого файла по отдельности, он отлично работает.Запустить операцию над несколькими файлами OGG в каталоге

Я также хочу, чтобы выходной файл с другим именем (в противном случае результирующий файл получает goobered большое время

«sox.exe FAIL форматы:. Не может открыть выходной файл` \ Temp \ OGG \ Rain .ogg ': Нет такого файла или каталога»

@echo off 

setlocal enabledelayedexpansion 
cd Data 
mkdir temp 

for %%A in ("OGG\*.ogg") do (
sox.exe %%A -C 0 \temp\%%A 
) 

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

OptOGG 
    |--OptOGG.bat 
    | 
    |--Data 
    |--OGG 
    | |--AudioFile.ogg 
    | 
    |--sox.exe 

Я все sox.exe зависимости там, тоже, и его было протестировано вручнуючтобы работать, я просто не включил их в макет выше.

В принципе, я хочу выполнить операцию sox во всех файлах ogg в каталоге (позже будет изменен каталог удаленного устройства) перезаписывая исходные файлы, сохраняя то же имя, что и оригинал.

ответ

0

Относительный путь, начинающийся с .\, ссылается на текущий каталог.

Относительный путь, начинающийся с ..\, ссылается на родительский каталог текущего каталога.

Относительный путь, начинающийся всего с \, ссылается на корень текущего диска.

Таким образом, вы создали временную папку в папке данных, но указанный в FOR циклическому временную папку в корневом каталоге текущего диска, на котором не существовало Temp папки.

Этот пакетный код с дополнительными проверками должен делать то, что вы хотите.

@echo off 
setlocal 

rem Get drive and path of batch file ending with a backslash and append 
rem Data which is the name of the data folder containing in subfolder 
rem OGG the audio files to optimize. 
set "DataFolder=%~dp0Data" 

rem Does this folder exist? 
if not exist "%DataFolder%" (
    echo Folder %DataFolder% does not exist! 
    goto EndBatch 
) 

if not exist "%DataFolder%\OGG" (
    echo Folder %DataFolder%\OGG does not exist! 
    goto EndBatch 
) 

if not exist "%DataFolder%\OGG\*.ogg" (
    echo Folder %DataFolder%\OGG does not contain any OGG file. 
    goto EndBatch 
) 

set "TempFolder=%DataFolder%\Temp" 
if not exist "%TempFolder%" (
    mkdir "%TempFolder%" 
    if errorlevel 1 (
     echo Failed to create %TempFolder% 
     goto EndBatch 
    ) 
) 

rem Run SOX on every OGG file in subfolder OGG of data 
rem folder with output file written to temp folder. 
for %%A in ("%DataFolder%\OGG\*.ogg") do (
    echo "%DataFolder%\sox.exe" "%%~fA" -C 0 "%TempFolder%\%%~nxA" 
) 
endlocal 
goto :EOF 

:EndBatch 
endlocal 
echo. 
echo Press any key to exit batch job %~n0. 
pause >nul 

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

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • mkdir /?
  • pause /?
  • rem /?
  • set /?
  • setlocal /?
+0

Спасибо. Очень полезно. Я, наконец, придумал сценарий, который работает, как я хочу (близко). Его не идеально, поскольку он не вытягивает файлы с пробелами в имени файла. – Noah

0

Спасибо. Очень полезно.Я, наконец, придумал сценарий, который работает, как я хочу (близко). Его не идеально, поскольку он не вытягивает файлы с пробелами в имени файла. Это часть гораздо большего скрипта, поэтому ярлык оптимизации находится в другом месте.

if %choice% == a (
    if exist OGG del /Q OGG 
    @md OGG 
    cls 
    Echo. 
    Echo Mounting system R/W... 
    adb remount 
    Echo. 
    Echo Pulling audio files... 
    adb pull /system/media/audio/alarms/ . 
    for %%a in ("*.ogg") do (
    Echo %%a 
    sox.exe %%a -C 0 "%current%\Data\OGG\%%a" 
) 
    Echo. 
    Echo Pushing optimized audio back to device... 
    adb push OGG /system/media/audio/alarms 
    @rmdir /S /Q OGG 
    @del *.ogg 
    Echo. 
    Echo Optimizations complete! 
    Pause 
    goto optimizations 
) 
+0

Использовать 'sox.exe '%% a" -C 0 "% current% \ Data \ OGG \ %% a" 'с кавычками вокруг первого' %% a', а ваш командный файл работает также для файлов OGG, содержащих 1 или более пробелы в имени файла. И сравнение строк должно выполняться также с использованием кавычек, т. Е. Первая строка должна быть 'if '% choice%" == "a" ('в вашем коде. – Mofi

Смежные вопросы