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

Is it possible to use wildcards within a Batch script to grab all directories under a path, and then use the relevant name for the creation of a file

标题有点绕,我为我糟糕的英语道歉,这不是我的母语而且我还很不流利。我希望我当前的代码比我的书面解释更好地解释了我的目标。

@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:\Users\USER\Downloads\FMOD conversion to packable[=10=]Tools\bincat"
CD "9temp\zzz_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" 设置字符串值 - 这避免了尾随 space 引起的问题。在比较中;不要分配终端 \、space 或引号 - 从元素构建路径名 - 违反直觉,这可能会使过程更容易。

您的 CD 语句将更改为与当前目录 RELATIVE 的目录,因此如果您当前位于 C:\somewhereC:\somewheretemp\zzz_FSBS_Extract_test .如果 9temp\zzz_FSBS_Extract_test 是绝对位置,那么您需要 temp\zzz_FSBS_Extract_test

for /D %%D in (\*) do 会将 %%D 设置为根目录中的每个目录名。由于您已更改为 ..?..9temp\zzz_FSBS_Extract_test,因此您需要 * 才能扫描当前目录。您也可以在不更改目录的情况下使用 "..?..9temp\zzz_FSBS_Extract_test\*"。 *我不知道9temp\...在哪里,所以我用..?..来表示它的位置。

请注意,要执行的命令必须紧跟在 do 之后,在同一物理行上。我添加了 ECHO 来显示将要执行的命令。确认命令正确后,删除 echo 关键字以实际执行命令。

注意BCAT_PATH设置为C:\Users\USER\Downloads\FMOD conversion to packable[=29=]Tools\bincat 生成的命令因此将"C:\Users\USER\Downloads\FMOD转换为packable[=57=]Tools\bincat\bincat".

我不知道 %%i 在您的程序中定义的位置。我已将它插入我认为应该插入的位置。这应该依次将 %%i 设置为目录 %%D 中的每个 .ogg 文件名。 %%~ni 应该 return 该文件的名称部分。

您的输出目录将是 ..?..9temp\zzz_BuiltOGG_test 因为您的当前目录是 ..?..9temp\zzz_FSBS_Extract_test\ 应该放在目录名和文件名之间。

不需要delayedexpansion,尽管setlocal是个好主意。

这不会对每个目录都执行,而是递归地查找每个 .ogg 文件,然后 运行 每个文件的命令。另请注意,我已将 .exe 扩展名添加到 bincat

@echo off
setlocal & set "BCAT_PATH=C:\Users\USER\Downloads\FMOD conversion to packable\0Tools\bincat"
cd /d "9temp\zzz_FSBS_Extract_test"
for /R %%i in (*.ogg) do "%BCAT_PATH%\bincat.exe" "%%~i" -o "..\zzz_BuiltOGG_test\%%~ni.tmp"