我正在尝试从java执行“normalizeaudioout/*.wav”命令。对于单个文件,如下所示,
Runtime.getRuntime().exec("normalize-audio 0002.wav");
很好用。但是,当我使用,
Runtime.getRuntime().exec("normalize-audio out/*.wav");
上面写着:
file *.wav: No such file or directory
你知道,我怎样才能做到吗?
我正在尝试从java执行“normalizeaudioout/*.wav”命令。对于单个文件,如下所示,
Runtime.getRuntime().exec("normalize-audio 0002.wav");
很好用。但是,当我使用,
Runtime.getRuntime().exec("normalize-audio out/*.wav");
上面写着:
file *.wav: No such file or directory
你知道,我怎样才能做到吗?
1条答案
按热度按时间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");
. 这样做的缺点是:首先,您现在的可移植性大大降低(您对路径上存在的第三方软件有需求),而且您可能会在调用中遇到各种各样的转义引号。