是否可以在批处理脚本中使用通配符来获取路径下的所有目录,然后使用相关名称创建文件



这是一个有点复杂的标题,我为我糟糕的英语道歉,这不是我的第一语言,我还远远不能流利。我希望我当前的代码比我的书面解释更能解释我的目标。

@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 packableToolsbincat"
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:somewhereC: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"

相关内容

  • 没有找到相关文章

最新更新