无法从java执行“normalize audio out/*.wav”

3b6akqbq  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(289)

我正在尝试从java执行“normalizeaudioout/*.wav”命令。对于单个文件,如下所示,

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

很好用。但是,当我使用,

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

上面写着:

file *.wav: No such file or directory

你知道,我怎样才能做到吗?

vtwuwzda

vtwuwzda1#

经济的扩张 * glob是,当您将脚本称为“正常”时,由shell执行。也就是说,bash或cmd.exe或您正在使用的任何东西 * 作为一个特殊字符,并执行一些逻辑来将其扩展为一组匹配的实际文件名。然后,脚本实际执行时将这些显式文件名作为参数传入。
所以,你有两个选择:
你自己也一样。查询相应目录中的文件,找到与 *.wav 模式,然后将它们构建到参数字符串中。所以不是调用exec传递 *.wav 作为脚本的参数,你最终会传递 0001.wav 0002.wav 0007.wav .
让bash来做。如果你调用 bash 作为程序,然后以字符串形式传入命令,那么bash将正常地进行glob扩展。这看起来像 Runtime.getRuntime().exec("bash -c normalize-audio out/*.wav"); . 这样做的缺点是:首先,您现在的可移植性大大降低(您对路径上存在的第三方软件有需求),而且您可能会在调用中遇到各种各样的转义引号。

相关问题