Выполнение пакетного файла с параметром — [Java — OpenSSL]

Я пытаюсь сгенерировать сертификат, используя команды openSSL в файле .bat и вызывая его из кода Java -

String loc = "C:\\Users\\xyz\\Desktop\\myFolder\\bin";
String subject = "/C=GB/ST=London/L=London/O=Global Security/OU=software/CN=blah/[email protected]";
List<String> cmds = Arrays.asList("cmd.exe", "/C", "start C:/Users/xyz/Desktop/myBat.bat", loc, subject);
ProcessBuilder builder = new ProcessBuilder(cmds);           
Process proc = builder.start();

myBat.bat

set root=%1
cd /D %root%
set arg2=%2
openssl req -new -out server.csr -key server.key -config openssl.cnf -subj %arg2%

Тема, переданная из кода Java, не позволяет мне выполнить файл bat? Я попытался избежать косой черты, но та же ошибка.

Как передать -subj[openSSL] через java-код в bat-файл.

Примечание. Это работает нормально [Жестко закодировано]

openssl req -new -out server.csr -key server.key -config openssl.cnf -subj "/C=GB/ST=London/L=London/O=Global Security/OU=software/CN=blah/[email protected]"

person NewBee    schedule 08.08.2017    source источник


Ответы (1)


Попробуйте это, 3 аргумента для вашего процесса, третий должен быть одной командой, которая будет передана cmd.exe, и внутри этой команды вам нужно поместить тему в кавычки:

List<String> cmds = Arrays.asList(
        "cmd.exe",
        "/C",
        "start C:/Users/xyz/Desktop/myBat.bat " + loc + " \"" + subject + "\""
);
person Hugues M.    schedule 08.08.2017
comment
set arg2=/C , выполняется в командной строке, кажется, что = не анализируется. - person NewBee; 09.08.2017
comment
О, я пропустил содержание subject, можете ли вы попробовать цитировать, как отредактировано выше? - person Hugues M.; 09.08.2017