从Java执行批处理文件不会授予对完整路径的访问权限

从Java执行批处理文件不会授予对完整路径的访问权限,java,windows,pdf,batch-file,cmd,Java,Windows,Pdf,Batch File,Cmd,我正在编写一个Java实用程序,它使用DITA工具包和ApacheFop执行批处理文件以生成PDF。它通过使用pdftk在首页添加水印来完成。如果我在Windows中使用Start>CMD执行批处理文件,批处理文件中的这一行将起作用: pdftk "%DITA_OUTPUT%book.pdf" multibackground C:\doc_build_system\watermark.pdf output "%DITA_OUTPUT%external.pdf" compress verbose

我正在编写一个Java实用程序,它使用DITA工具包和ApacheFop执行批处理文件以生成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()执行批处理文件时,同一行失败

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

C:\Program Files (x86)\PDFtk Server\bin\
……但事实并非如此。我试图通过调用runtime.exec(“CMD/c batchfile.bat”)(而不是直接调用batchfile)通过CMD强制执行,但这也没有效果


有什么想法吗?

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

启动
cmd.exe
。然后键入:

SET PATH=%PATH%;C:\Program Files (x86)\PDFtk Server\bin
java MyProgram
如果这样做有效,则必须检查是否编辑了right PATH变量。在Windows中,您可以为每个用户提供不同的路径环境变量,另外还有一个系统范围的路径变量(请参见屏幕截图),该变量将始终应用并与用户变量组合。

e、 g.如果您确实为您的用户设置了路径,然后使用administrator for Highted rights来执行java,则不会正确设置路径

确保使用系统变量


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

只需从以下位置获取
pathman

用法: /作为路径[;路径[;路径…] 将分号分隔的路径添加到系统路径。 /au路径[;路径[;路径…] 将分号分隔的路径添加到用户路径。 /rs路径[;路径[;路径…]] 从系统路径中删除分号分隔的路径。 /ru路径[;路径[;路径…]] 从用户路径中删除分号分隔的路径。
谢谢我已经设置了全局系统路径。我被告知这不是重启问题,但我现在会尝试。 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.