无法执行" normalize-audio out / * .wav"来自java

时间:2015-01-15 09:57:55

标签: java runtime.exec

我正在尝试执行" normalize-audio out / * .wav"来自java的命令。单个文件如下,

Runtime.getRuntime().exec("normalize-audio 0002.wav");

它工作正常。但是,当我使用时,

Runtime.getRuntime().exec("normalize-audio out/*.wav");

它说:

     file *.wav: No such file or directory

任何想法,我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

* glob的扩展,当你调用你的脚本"通常",由shell执行。也就是说,bash或cmd.exe或您正在使用的任何内容,将*视为一个特殊字符,并执行一些逻辑将其扩展为匹配的实际文件名集。然后,实际执行脚本,将这些显式文件名作为参数传递。

所以,你有两个选择:

  1. 自己做同样的事情。查询相应目录中的文件,找到与*.wav模式匹配的所有文件,然后将它们构建到参数字符串中。因此,不是调用exec传递*.wav作为脚本的参数,而是最终传递类似0001.wav 0002.wav 0007.wav的内容。
  2. 获取bash来执行此操作。如果您调用bash作为程序,然后将命令作为字符串传递,那么bash将正常进行其glob扩展。这看起来像Runtime.getRuntime().exec("bash -c normalize-audio out/*.wav");。这方面的缺点首先是你现在的便携性要低得多(你对PATH上存在的第三方软件有要求),而且你可以在你的调用中通过转义引号来解决各种各样的问题。 / LI>