java - 从 Java 执行批处理文件不能访问完整的 PATH

标签 java windows pdf batch-file cmd

我正在编写一个 Java 实用程序,它使用 DITA 工具包和 Apache FOP 执行批处理文件以生成 PDF。它通过使用 pdftk 为首页添加水印来完成。如果我在 Windows 中使用“开始”>“CMD”执行批处理文件,则批处理文件中的这一行有效:

pdftk "%DITA_OUTPUT%book.pdf" multibackground C:\doc_build_system\watermark.pdf output "%DITA_OUTPUT%external.pdf" compress verbose

当我通过 Runtime.exec() 执行批处理文件时,同一行失败。

失败的原因是通过Java执行时PATH变量不完整。它应该有一个条目,如:

C:\Program Files (x86)\PDFtk Server\bin\

...但事实并非如此。我试图通过调用 runtime.exec("cmd/c batchfile.bat")(而不是直接调用批处理文件)来通过 CMD 强制执行,但这也没有效果。

有什么想法吗?

最佳答案

您可以尝试在 cmd 中启动 java 之前手动设置路径:

启动cmd.exe。然后输入:

SET PATH=%PATH%;C:\Program Files (x86)\PDFtk Server\bin
java MyProgram

如果这有效,您必须检查是否编辑了正确的 PATH 变量。在 Windows 中,您可以为每个用户设置不同的 PATH 环境变量,此外还有一个系统范围的 PATH 变量(参见屏幕截图)将始终应用并与用户变量组合。 enter image description here

例如如果您确实为您的用户设置了路径,然后使用管理员提升权限来执行 java,则 PATH 将无法正确设置。

确保使用系统变量。

还要确保在编辑变量后重新启动 Windows,因为打开的应用程序和控制台通常只会在启动时获取一次环境变量。

关于java - 从 Java 执行批处理文件不能访问完整的 PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595326/

相关文章:

javascript - Spring Boot GetMapping 404

java - 如何在客户端记录 SOAP 消息?

javascript - 单击按钮在 iframe 内缩放 PDF

java - 如何读取文本文件并使用 HashMap 存储?

java - 如果所请求的 key 不存在,应该抛出什么异常?

c++ - 如何从可执行文件的多重/双重代码签名中检索信息

python - Anaconda 安装问题 - 如何卸载 Anaconda (Windows)

windows - 为什么 IsWindowVisible 使 EnumDesktopWindows 的回调只运行一次?

c# - 在 asp.net webform 中使用另存为选项打开 PDF 文件

pdf - ITextSharp 添加文本。部分文字不显示