You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash遍历指定文件夹文件并等待CMD程序执行完成的问题

解决Bash遍历MID文件调用CMD录制脚本的错误问题

看起来你的问题主要出在Bash循环语法错误、路径传递格式不匹配以及CMD脚本参数处理这几个地方,我来一步步帮你解决:

1. 先修复Bash循环的基础语法错误

你原来的循环脚本少了一个分号,导致Bash无法正确解析done命令,这是报错的直接原因。修正后的循环应该是这样的(两种写法都可以):

# 单行写法,注意done前的分号和变量的引号
for filename in /ToBeRendered/*.mid; do ./1Processor.cmd "$filename"; done

或者更易读的多行写法:

for filename in /ToBeRendered/*.mid
do
    # 用引号包裹变量,避免文件名/路径有空格时被拆分
    ./1Processor.cmd "$filename"
done

2. 处理Bash到Windows的路径转换问题

因为你调用的是Windows程序(Synthesia.exe),如果你的Bash环境是WSL(Windows子系统Linux)或者Git Bash,Linux风格的路径(比如/ToBeRendered/xxx.mid)无法被CMD识别,需要转换成Windows格式(比如C:\ToBeRendered\xxx.mid):

如果是WSL环境:

用wslpath -w命令转换路径:

for filename in /ToBeRendered/*.mid; do
    # 把Linux路径转换成Windows格式
    win_filename=$(wslpath -w "$filename")
    ./1Processor.cmd "$win_filename"
done

如果是Git Bash/Cygwin环境:

用cygpath -w命令替代:

for filename in /ToBeRendered/*.mid; do
    win_filename=$(cygpath -w "$filename")
    ./1Processor.cmd "$win_filename"
done

3. 修正你的1Processor.cmd脚本

你原来的CMD命令里有几个小问题:

  • DirectoryHere\%~1是多余的,因为我们已经传递了完整的文件路径
  • 末尾的exit没必要,START /WAIT已经会等待Synthesia执行完毕

修正后的1Processor.cmd内容:

START /WAIT "" "C:\Program Files (x86)\Synthesia\Synthesia.exe" --on-startup Play --on-song-end Quit "%~1"

这里的"%~1"会正确接收传递过来的Windows格式路径,并且引号能处理路径中的空格。

4. 确保CMD脚本有可执行权限(可选)

如果Bash提示无法执行1Processor.cmd,可以先赋予它可执行权限:

chmod +x 1Processor.cmd

按照上面的步骤调整后,应该就能正常遍历每个MID文件,逐个调用Synthesia录制并等待完成了。

内容的提问来源于stack exchange,提问作者TheYargonaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:51:51