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

时间:2013-09-03 14:50:25

标签: java windows pdf batch-file cmd

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

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(而不是直接调用批处理文件),但这也没有效果。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

开始cmd.exe。然后输入:

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

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

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

确保使用系统变量。

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

答案 1 :(得分:0)

Windows Server 2003 Resource Kit获取pathman

USAGE:

        /as path[;path[;path ...]]
                Adds the semicolon-separated paths to the system path.

        /au path[;path[;path ...]]
                Adds the semicolon-separated paths to the user path.

        /rs path[;path[;path ...]]
                Removes the semicolon-separated paths from the system path.

        /ru path[;path[;path ...]]
                Removes the semicolon-separated paths from the user path.