Поместите файлы в несколько этапов ОДИН РАЗ в пакетный файл - PullRequest
0 голосов
/ 04 октября 2018

Извините, если это большая ладонь для вас, ребята.Я новичок, просто пытаюсь сэкономить время.

У меня есть несколько файлов .bnk, которые я хотел бы пройти через несколько шагов, чтобы извлечь аудио из файлов.Моя проблема в том, что извлеченные файлы перезаписывают друг друга по мере их создания, и я пытаюсь получить извлеченные файлы в свою собственную папку.

Вот мой текущий пакетный файл:

FOR %%a IN ("Game Files\*.BNK") DO (MD "%%~na" 2>nul) 
FOR %%b IN ("Game Files\*.BNK") DO ("Tools\bnkextr.exe" "%%b" & MOVE *.wav "Tools\Decoding")
FOR %%c IN (Tools\Decoding\*.WAV) DO ("Tools\ww2ogg.exe" "%%c" --pcb Tools\packed_codebooks_aoTuV_603.bin & DEL "%%c")
FOR %%d IN (Tools\Decoding\*.OGG) DO ("Tools\revorb.exe" "%%d" & MOVE "%%a" "%%~na")
FOR %%f IN ("Game Files\*.BNK") DO (DEL "%%f")
echo BNK files deleted, enjoy your unpacked audio!
pause 
exit

У меня есть несколько файлов .bnk в папке \ Game Files \, например:

GameSoundFX.bnk
GameMusic.bnk

Первая строкамоего кода создает новую папку на основе имени файла .bnk.

FOR %%a IN ("Game Files\*.BNK") DO (MD "%%~na" 2>nul) 

В следующих трех строках .bnk проходит через серию процессов извлечения и кодирования.Сначала он создает несколько файлов .wav, а затем преобразует их в файлы .ogg.Я бы хотел, чтобы затем эти файлы .ogg переместились в соответствующую папку, чтобы я получил что-то вроде этого ..

\GameSoundFX\0001.ogg
\GameSoundFX\0002.ogg
\GameSoundFX\0003.ogg
\GameMusic\0001.ogg
\GameMusic\0002.ogg
\GameMusic\0003.ogg

Но проблема в том, что ...

1)первая строка создает все папки: первая

2) вторая строка создает все файлы .wav (и файлы .wav из второго файла .bnk перезаписывают первую) *

3) четвертаястрока не перемещает файлы в правильную папку.они остаются в \ Tools \ Decoding \

Итак, я предполагаю, что мой вопрос заключается в том, как я могу заставить этот пакетный файл проходить через процесс с каждым файлом .bnk ОДИН РАЗ, а затем помещать файлы .oggв папку, которую мы создаем с первой строкой кода?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

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

@ECHO off
FOR %%a IN ("Game Files\*.BNK") DO (
    MD "%%~na" 2>nul
    Tools\bnkextr.exe" "%%a"
    MOVE *.wav "Tools\Decoding"
    FOR %%c IN (Tools\Decoding\*.WAV) DO (
        "Tools\ww2ogg.exe" "%%c" --pcb Tools\packed_codebooks_aoTuV_603.bin
        DEL "%%c"
    )
    FOR %%d IN (Tools\Decoding\*.OGG) DO (
        "Tools\revorb.exe" "%%d"
        REM ##### Unsure what you are trying to move here ####
        MOVE "%%d" "%%~na"
    )
    REM Deleting the .BNK file
    DEL "%%a"
)
pause 
exit
0 голосов
/ 04 октября 2018

Спасибо jwdonahue!

Ваш код почти сработал.Мне просто пришлось немного отрегулировать, потому что файлы .ogg остались в \ Tools \ Decoding.Я протестировал его с несколькими файлами .bnk в \ Game Files \, и это сработало!Огромное спасибо.

setlocal EnableExtensions

for %%I in ("Game Files\*.BNK") do call :ProcessBNK "%%I"
exit /b

:ProcessBNK
set _targetDir="%~n1"
md %_targetDir% 2>nul
Tools\bnkextr.exe %1
move *.wav Tools\Decoding
for %%I in (Tools\Decoding\*.WAV) do call :ProcessWAV "%%I"
for %%I in (Tools\Decoding\*.OGG) do Tools\revorb.exe "%%I"
move Tools\Decoding\*.OGG %_targetDir%
move %1 %_targetDir%
exit /b

:ProcessWAV
Tools\ww2ogg.exe %1 --pcb Tools\packed_codebooks_aoTuV_603.bin
del %1
exit /b
0 голосов
/ 04 октября 2018

Избегайте многокомандных блоков / строк кода (вложенность, & и &&), где это возможно.Это упрощает процесс отслеживания при отладке, и просто с первого раза проще сделать все правильно.

Не проверено:

@setlocal EnableExtensions

@set _decodingDir=Tools\Decoding
@for %%I in ("Game Files\*.BNK") do @call :ProcessBNK "%%I"
@exit /b

:ProcessBNK
@set _targetDir="%~n1"
@md %_targetDir% 2>nul
@Tools\bnkextr.exe %1
@move *.wav %_decodingDir%
@for %%I in (%_decodingDir%\*.WAV) do @call :ProcessWAV "%%I"
@for %%I in (%_decodingDir%\*.OGG) do @Tools\revorb.exe "%%I"
@move %_decodingDir%\*.ogg %_targetDir%
@move %1 %_targetDir%
@exit /b

:ProcessWAV
@Tools\ww2ogg.exe %1 --pcb Tools\packed_codebooks_aoTuV_603.bin
@del %1
@exit /b

Удалите начальный символ @, чтобы отображались строки при отладке (предполагает, что в вашем командном окне включено эхо).

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