用Java执行批处理文件无法访问完整的PATH路径

3

我正在编写一个Java实用程序,它执行批处理文件使用DITA工具包和Apache FOP生成PDF。最后使用pdftk在首页上打水印。如果我在Windows中使用Start>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")(而不是直接运行batchfile)来强制执行,但这也没有效果。

有什么想法吗?

2个回答

1

在启动Java之前,您可以尝试手动设置路径:

打开cmd.exe,然后输入以下命令:

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

如果这个方法有效,你需要检查是否编辑了正确的PATH变量。在Windows上,每个用户可以有不同的环境变量路径,还有一个系统范围的PATH变量(见截图),它将始终应用于并与用户变量组合使用。
例如:如果您为自己设置了路径,然后使用管理员进行提升权限以执行Java,则路径将无法正确设置。请确保使用系统变量,并确保在编辑变量后重新启动Windows,因为打开的应用程序和控制台通常仅在启动时获取环境变量一次。

谢谢。我已经设置了全局系统路径。有人告诉我这不是重启问题,但我现在会尝试一下。 - Agnes

0

只需从Windows Server 2003资源工具包中获取pathman

用法:
/as path[;path[;path ...]] 将分号分隔的路径添加到系统路径中。
/au path[;path[;path ...]] 将分号分隔的路径添加到用户路径中。
/rs path[;path[;path ...]] 从系统路径中删除分号分隔的路径。
/ru path[;path[;path ...]] 从用户路径中删除分号分隔的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接