我正在尝试执行" 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
任何想法,我怎么能做到这一点?
答案 0 :(得分:0)
*
glob的扩展,当你调用你的脚本"通常",由shell执行。也就是说,bash或cmd.exe或您正在使用的任何内容,将*
视为一个特殊字符,并执行一些逻辑将其扩展为匹配的实际文件名集。然后,实际执行脚本,将这些显式文件名作为参数传递。
所以,你有两个选择:
*.wav
模式匹配的所有文件,然后将它们构建到参数字符串中。因此,不是调用exec传递*.wav
作为脚本的参数,而是最终传递类似0001.wav 0002.wav 0007.wav
的内容。bash
作为程序,然后将命令作为字符串传递,那么bash将正常进行其glob扩展。这看起来像Runtime.getRuntime().exec("bash -c normalize-audio out/*.wav");
。这方面的缺点首先是你现在的便携性要低得多(你对PATH上存在的第三方软件有要求),而且你可以在你的调用中通过转义引号来解决各种各样的问题。 / LI>
醇>