代码之家  ›  专栏  ›  技术社区  ›  absoluteidiot

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

  •  0
  • absoluteidiot  · 技术社区  · 2 年前

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

    @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
    
    0 回复  |  直到 2 年前
        1
  •  0
  •   Magoo    2 年前
    @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 FOR %%i in ("%%D\*.ogg") do ECHO "%BCAT_PATH%\bincat"  "%%i" -o "..\zzz_BuiltOGG_test\%%~ni.tmp"
    PAUSE
    

    使用 set "var1=data" 用于设置字符串值——这避免了尾随空格引起的问题。在比较中;不要指定终端 \ ,空格或引号-从元素中构建路径名-这可能会让过程变得更简单,这与直觉相反。

    你的 CD 语句将更改为目录 相对的 到您当前的目录,所以如果您当前在 C:\somewhere C:\somewhere\9temp\zzz_FSBS_Extract_test 如果 9temp\zzz_FSBS_Extract_test 是一个绝对位置,那么你需要 \9temp\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\0Tools\bincat 因此,生成的命令将是“C:\Users\USER\Downloads\FMOD conversion to packable\0Tools\bincat” \宾卡特 ".

    我不知道在哪里 %%i 是在你的程序中定义的。我已经把它插到了我认为应该放的地方。这应该会定下来 %%我 每人 .ogg 目录中的文件名 %%D 反过来 %%~ni 应该返回该文件的名称部分。

    您的输出目录将是 ..?..9temp\zzz_BuiltOGG_test 因为您当前的目录是 ..?..9temp\zzz_FSBS_提取_测试 这个 \

        2
  •  0
  •   Gerhard    2 年前

    没有必要这样做 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"