对不起,如果这对您来说是一张大脸。我是一个初学者,只是想节省一些时间。
我有一些.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
我在\ Game Files \文件夹中有多个.bnk文件,例如:
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文件(第二个.bnk文件中的.wav文件覆盖第一个)
3)第四行未将文件移动到正确的文件夹中。它们保留在\ Tools \ Decoding \
所以,我想我的问题是,如何让该批处理文件一次与每个.bnk文件一起在整个过程中运行,然后将.ogg文件放入我们用第一行代码创建的文件夹中?
答案 0 :(得分:2)
您可以轻松地嵌套命令以确保它一次处理一个文件。当您将命令嵌套在带括号的代码块中时,它有助于缩进代码,从而使您知道什么属于什么。我不确定您的某些代码在做什么,因此我在代码中做了注释。看看是否有帮助。
@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
答案 1 :(得分:0)
尽可能避免使用多命令代码块/代码行(嵌套&
和&&
)。调试时,它使事情变得更容易遵循,并且在第一次安装时也变得更加容易。
未经测试:
@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
在调试时删除前导@
符号以显示行(假定在命令窗口中启用了echo)。
答案 2 :(得分:-1)
谢谢jwdonahue!
您的代码几乎可以正常工作。我只需要进行一些调整,因为.ogg文件保留在\ Tools \ Decoding中。我在\ Game Files \中使用多个.bnk文件对其进行了测试,并且可以正常工作!非常感谢。
run