这是一个有点复杂的标题,我为我糟糕的英语道歉,这不是我的第一语言,我还远远不能流利。我希望我当前的代码比我的书面解释更能解释我的目标。
@echo off
Setlocal enableextensions enabledelayedexpansion
set BCAT_PATH="C:\Users\USER\Downloads\FMOD conversion to packable\0Tools\bincat"
CD "9temp\zzz_FSBS_Extract_test"
for /D %%D in (*) do
"%BCAT_PATH%\bincat" "%%D*.ogg" -o "..\zzz_BuiltOGG_test%%~ni.tmp"
PAUSE
@echo off
Setlocal enableextensions enabledelayedexpansion
set "BCAT_PATH=C:UsersUSERDownloadsFMOD conversion to packable Toolsbincat"
CD "9tempzzz_FSBS_Extract_test"
for /D %%D in (*) do FOR %%i in ("%%D*.ogg") do ECHO "%BCAT_PATH%bincat" "%%i" -o "..zzz_BuiltOGG_test%%~ni.tmp"
PAUSE
使用set "var1=data"
设置字符串值-这样可以避免尾部空格引起的问题。在比较中;不要分配终端、空格或引号——从元素中构建路径名——这可能会让过程变得更容易。
您的CD
语句将更改为当前目录的RELATIVE目录,因此如果您当前位于C:somewhere
到C:somewhere9tempzzz_FSBS_Extract_test
。如果9tempzzz_FSBS_Extract_test
是一个绝对位置,那么您需要9tempzzz_FSBS_Extract_test
CCD_ 8将CCD_ 9设置为根目录中的每个directoryname。由于您已更改为..?..9tempzzz_FSBS_Extract_test
,因此需要*
来扫描当前目录。您也可以在不更改目录的情况下使用"..?..9tempzzz_FSBS_Extract_test*"
*我不知道9temp...
在哪里,所以我用..?..
来表示它的位置。
请注意,要执行的命令必须紧跟在do
之后,在同一物理线上。我添加了ECHO
来显示将要执行的命令。验证该命令正确后,删除echo
关键字以实际执行该命令。
注意CCD_ 18被设置为CCD_;C: \Users\USER\Downloads\FMOD转换为可打包的\0Tools\bincat\bincat"。
我不知道%%i
在你的程序中定义在哪里。我已经把它插在我认为应该放的地方了。这应该依次将%%i
设置为目录%%D
中的每个.ogg
文件名。%%~ni
应该返回该文件的名称部分。
您的输出目录将是..?..9tempzzz_BuiltOGG_test
,因为您当前的目录是..?..9tempzzz_FSBS_Extract_test
。应该放在directoryname和文件名之间。
尽管setlocal
是个好主意,但不需要delayedexpansion
。
这不会针对每个目录,而是递归地查找每个.ogg
文件,然后在每个文件上运行该命令。另外请注意,我已将.exe
扩展添加到bincat
@echo off
setlocal & set "BCAT_PATH=C:UsersUSERDownloadsFMOD conversion to packable\0Toolsbincat"
cd /d "9temp\zzz_FSBS_Extract_test"
for /R %%i in (*.ogg) do "%BCAT_PATH%bincat.exe" "%%~i" -o "..zzz_BuiltOGG_test%%~ni.tmp"