【问题标题】:Bash - How to iterate over all files in a folder and wait for completionBash - 如何遍历文件夹中的所有文件并等待完成
【发布时间】:2018-04-14 20:56:40
【问题描述】:

我有一个录制视频的小 cmd 程序,并像这样等待一个参数作为文件名:

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

我不知道如何遍历特定文件夹中的所有文件,并在等待它退出的同时运行该程序。

这是我目前在 bash 中的尝试:

for filename in /ToBeRendered/*.mid; do
  ./1Processor.cmd $filename
done

这给出了错误,line1: syntax error near unexpected token '$'do/r

【问题讨论】:

  • 我已经修复了您的代码片段,因此它们使用四个前导空格;还有 bash 脚本的缩进。循环看起来不错,但它使用的是根目录的子目录。也许你的意思是./ToBeRendered/*.mid。另外,bash shell 是否知道如何执行.cmd 文件?也许你的意思是cmd 1Processor.cmd $filename
  • 这是 Cygwin 或 MinGW bash 运行 Windows .cmd 脚本吗?
  • 这是在 windows 10 中使用 linux 模块中的 bash。我尝试了你的建议,我仍然得到:test.sh: line 1: syntax error near unexpected token $'do\r'' 'est.sh: line 1: for filename in . /ToBeRendered/*.mid;做

标签: windows bash shell command-line cmd


【解决方案1】:

为什么要混合批处理/bash 代码?最好使用其中一个或另一个。
对于纯批次,这将是这样的:

for %%a in (\ToBeRendered\*.mid) do (
    START /WAIT "" "C:\Program Files (x86)\Synthesia\Synthesia.exe" --on-startup Play --on-song-end Quit "DirectoryHere\%%~nxa"
)

【讨论】:

  • 这成功了!作为对以后遇到此特定问题的任何人的说明,将“DirectoryHere\%%~a”更改为“DirectoryHere\%%~nxa”将删除路径
  • 是的 - 当然。我忘了...改变了。
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
相关资源
最近更新 更多