Имеет пробелы в Runtime.getRuntime(). Exec с 2 исполняемыми файлами

У меня есть команда, которую мне нужно запустить в java по этим строкам:

    C:\path\that has\spaces\plink -arg1 foo -arg2 bar "path/on/remote/machine/iperf -arg3 hello -arg4 world"

Эта команда отлично работает, когда путь не имеет пробелов, но когда у меня есть пробелы, я не могу заставить его работать. Я пробовал следующие вещи, используя Java 1.7

String[] a = "C:\path\that has\spaces\plink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf -arg3 hello -arg4 world"
Runtime.getRuntime().exec(a);

а также

String[] a = "C:\path\that has\spaces\plink", "-arg1 foo", "-arg2 bar", "path/on/remote/machine/iperf", "-arg3 hello", "-arg4 world"
Runtime.getRuntime().exec(a);

Но ничто, кажется, ничего не делает. Любые мысли о том, что я делаю неправильно?

Ответ 1

Каждый аргумент, который вы передаете команде, должен быть отдельным элементом String.

Итак, массив команд должен выглядеть больше...

String[] a = new String[] {
    "C:\path\that has\spaces\plink",
    "-arg1",
    "foo", 
    "-arg2",
    "bar",
    "path/on/remote/machine/iperf -arg3 hello -arg4 world"};

Каждый элемент теперь будет отображаться как отдельный элемент в программах args variable

Я также очень рекомендую вам использовать ProcessBuilder, так как его легче настроить и не требует, чтобы вы завернули некоторые команды в "\"...\""