Как запустить две разные команды с помощью построителя процессов

Извините, если я снова открываю тот же вопрос. Я хочу запустить две команды

  1. D:\cygwin\bin\Тест

  2. sh app.sh AK-RD 02.20 D:\cygwin\bin\Test_files

Выше приведены две команды, которые я хочу запустить в одной и той же командной строке. Это означает, что мне нужно зайти в папку D:\cygwin\bin\Test и в том же приглашении я хочу запустить следующую команду.

sh app.sh AK-RD 02.20 D:\cygwin\bin\Test_files

Команда будет выглядеть так:

Команда: - D:\cygwin\bin\Test>sh app.sh AK-RD 02.20 D:\cygwin\bin\Test_files

Как это сделать с помощью Process Builder в java. Или есть ли другой способ сделать это.

String cmd;   
   cmd = "sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files";
    ProcessBuilder probuilder = new ProcessBuilder( cmd );
    probuilder.directory(new File("D:\\cygwin\\bin\\Test"));
    Process process = probuilder.start();

Это мне не поможет, даже если я изменю probuilder.directory в коде. я осознаю

Cannot run program "'sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files  CreateProcess error=2, The system cannot find the file specified

person Code Hungry    schedule 14.02.2012    source источник


Ответы (2)


Ошибка означает, что система не может найти файл sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files.exe в пути.

Это означает, что ProcessBuilder интерпретирует всю строку (включая обратную косую черту, пробелы и все остальное) как имя команды. Это не то, что вы хотите.

Разделите команду на отдельные слова:

ProcessBuilder pb = new ProcessBuilder( "sh", "app.sh", "AK-RD", "02.20", "D:\\cygwin\\bin\\Test_files" );

и используйте pb.directory() до CD в правильный каталог.

В качестве альтернативы поместите все в скрипт BAT/CMD и запустите его с помощью ProcessBuilder

person Aaron Digulla    schedule 14.02.2012

Вы можете позвонить

ProcessBuilder pb = new ProcessBuilder();
pd.directory(new File("D:\\cygwin\\bin\\Test"));

установить рабочий каталог.

Редактировать:

Вы также можете попробовать разделить свою команду на аргументы

String cmd[] = new String[5];
cmd[0] = "sh";
cmd[1] = "app.sh";
cmd[2] = "AK-RD";
cmd[3] = "02.20";
cmd[4] = "D:\\cygwin\\bin\\Test_files";
person ughzan    schedule 14.02.2012
comment
Можете ли вы сказать, как именно это должно быть, потому что я получаю ошибку CreateProcess error = 2, система не может найти указанный файл - person Code Hungry; 14.02.2012
comment
Я видел какое-то странное поведение, когда команды не разбивались на аргументы. Разделение работает на вас? До сих пор нет любви? - person ughzan; 14.02.2012