java - 带参数的批处理文件执行 - [Java - OpenSSL]

标签 java windows batch-file openssl processbuilder

我正在尝试使用 .bat 文件中的 openSSL 命令生成证书并从 Java 代码调用它 -

String loc = "C:\\Users\\xyz\\Desktop\\myFolder\\bin";
String subject = "/C=GB/ST=London/L=London/O=Global Security/OU=software/CN=blah/emailAddress=a.b@xyz.com";
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文件? 我尝试转义正斜杠,但出现同样的错误。

如何通过java代码将-subj[openSSL]传递到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/emailAddress=a.b@xyz.com"

最佳答案

尝试一下,您的进程有 3 个参数,第三个参数需要是将传递给 cmd.exe 的单个命令,并且在该命令中您需要在主题周围加上引号:

List<String> cmds = Arrays.asList(
        "cmd.exe",
        "/C",
        "start C:/Users/xyz/Desktop/myBat.bat " + loc + " \"" + subject + "\""
);

关于java - 带参数的批处理文件执行 - [Java - OpenSSL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45575979/

相关文章:

java - 如何解析 JSON 响应对象并将其显示在 TextView 中

java - 为什么使用服务层而不是 spring Controller 的帮助类?

java - android 中的 getWindow().addFlags()

java - 连接关闭时结果集未关闭?

windows - 以全屏/信息亭模式启动桌面 PWA

windows - 删除除 X 个最近的文件夹以外的所有文件夹

batch-file - 批处理无法在if语句中获取值(value)

windows - 从 WMIC 中批量获取变量的产品名称

c++ - 有没有办法获取在处理信号期间访问的指针?

batch-file - 7-zip 正在使用的文件