2015-01-15 1 views
0

Я пытаюсь выполнить команду «normalize-audio out/*. Wav» из java. для одного файла следующим образом:не удалось выполнить «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

Запуск всех файлов под каталогом доступа первого доступа получить все имена файлов с .wav, чем указать определенный путь, например C: /Sound/file.wav – Sarz

ответ

0

Расширение шара *, когда вы вызываете свой скрипт «нормально», выполняемый оболочкой. То есть 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), а также чтобы вы могли входить во всевозможные путаницы с экранированием кавычек в вашем вызове.
+0

Второй подход работает с другими командами, такими как «ls out/*» но не работает с «normalize-audio out/*». я не знаю, в чем причина – BhendiGawaar