是否可以在批处理脚本中使用通配符来获取路径下的所有目录,然后使用相关名称创建文件
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:\somewhere
至 C:\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"
标题有点绕,我为我糟糕的英语道歉,这不是我的母语而且我还很不流利。我希望我当前的代码比我的书面解释更好地解释了我的目标。
@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:\somewhere
至 C:\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"