【发布时间】:2017-11-01 18:05:14
【问题描述】:
我编写了一个需要在批处理文件中执行的 java 程序。当我运行执行批处理文件的程序时,批处理文件将创建并写入相应的日志,但不会运行可执行 jar。
我的批处理文件:
SETLOCAL ENABLEEXTENSIONS
SET me=%~n0
SET parent=%~dp0
SET log=C:\apps\HL7\src\Error_log\Pipeline_batch_log.txt
ECHO /* ************************* Error Log Initiated ************************* */ >> %log%
ECHO %DATE:~10,4%:%DATE:~4,2%:%DATE:~7,2%-%TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% >> %log%
ECHO %parent% >> %log%
ECHO %me% >> %log%
CD c:\apps\HL7\src
IF %ERRORLEVEL% NEQ 0 (
ECHO error - CD failed. >> %log%
)
ECHO java -jar HL7toSS.jar "%1" "%2" "%3" "%4" "%3" "%4" >> %log%
java -jar HL7toSS.jar "%1" "%2" "%3" "%4" "%3" "%4">> %log%
DEL c:\apps\HL7\src\%2
IF %ERRORLEVEL% NEQ 0 (
ECHO error - HL7 xml file did not delete. >> %log%
)
ECHO /* ****************************** END OF LOG ****************************** */ >> %log%
EXIT
如您所见,我记录了可执行 jar 的输出,但它是无声的(我假设是因为它从未运行过)。我还记录了应该运行的命令;复制此命令并在命令提示符中运行它就可以了。
这是我在日志文件中看到的输出
/* ************************* Error Log Initiated ************************* */
2017:05:31-14:38:16
C:\APPS\HL7\src\
Pipeline_batch
Infile: Inbound_EDI_Files\test_1.txt HL7file: HL7_XML_Files\793723096202_HL7_test_1.xml MPAXMLfile: C:\apps\HL7\src\Processed_SS_Files\successful\793723096202_SS_test_1.xml MPAXMLERRfile: Processed_SS_Files\failed\793723096202_ERR_test_1.xml BIOMEDXMLfile: C:\apps\HL7\src\Processed_SS_Files\successful\793723096202_SS_test_1.xml BIOMEDXMLERRfile: Processed_SS_Files\failed\793723096202_ERR_test_1.xml
java -jar HL7toSS.jar "Inbound_EDI_Files\test_1.txt" "HL7_XML_Files\793723096202_HL7_test_1.xml" "C:\apps\HL7\src\Processed_SS_Files\successful\793723096202_SS_test_1.xml" "Processed_SS_Files\failed\793723096202_ERR_test_1.xml" "C:\apps\HL7\src\Processed_SS_Files\successful\793723096202_SS_test_1.xml" "Processed_SS_Files\failed\793723096202_ERR_test_1.xml"
/* ****************************** END OF LOG ****************************** */
在命令提示符中复制和粘贴相同的命令会产生以下预期结果
c:\APPS\HL7\src>java -jar HL7toSS.jar "Inbound_EDI_Files\test_1.txt" "HL7_XML_Fi
les\793722688601_HL7_test_1.xml" "C:\apps\HL7\src\Processed_SS_Files\successful\
793722688601_SS_test_1.xml" "Processed_SS_Files\failed\793722688601_ERR_test_1.x
ml" "C:\apps\HL7\src\Processed_SS_Files\successful\793722688601_SS_test_1.xml" "
Processed_SS_Files\failed\793722688601_ERR_test_1.xml"
Processing: main
Processing: Convert to XML
Finished: Convert to XML
Processing: Choose
Finished: Choose
Skipping: MPA XSLT operator: Input is not available.
Skipping: MPA Validate operator: Input is not available.
Processing: BIOMED XSLT operator
Finished: BIOMED XSLT operator
Processing: BIOMED Validate operator
Finished: BIOMED Validate operator
Finished: main
c:\APPS\HL7\src>
在尝试运行 jar 时,您是否看到任何会导致批处理文件静默失败的情况?
编辑:
从命令提示符运行批处理文件本身也可以。问题似乎源于调用程序,这是一个 Progress ABL 程序。 ABL 程序正在执行批处理文件,如下所示:
ASSIGN runthis = "C:\apps\HL7\src\Pipeline_batch.bat " + INpath + " " + HL7path + " " + SSpath + " " + XML-ERRpath.
OS-COMMAND SILENT VALUE(runthis).
我们知道传入批处理文件的参数是正确的,因为有日志。
编辑 2:
在我的本地机器上一切正常。仅在服务器上发生此问题。我的直觉是,这与服务器的 Progress 安装与我本地计算机上的安装有所不同。我现在需要一个进度向导。
【问题讨论】:
-
您是否指定了 Java 可执行文件的完整路径?尝试运行 Java 后 echo %errorlevel% 的输出是什么?
-
我做的第一件事是将目录更改为 c:\apps\HL7\src,这是 .bat 和 .jar 所在的位置。除非发生错误,否则 %errorlevel% 回显没有输出。
-
批量提供包含
793723096202但在cmd中包含793722688601的不同名称。因此,结果也可能不同。 -
不。不是这个。系统时间仅反映批处理运行的时间。问题不在于参数。
-
首先,删除静默以查看批处理结束时是否实际显示任何错误。其次,我不会仅仅因为您更改了目录就相信 Progress 位于正确的文件夹中。将路径添加到 propath 并在最后将其删除,就像测试一样。最后,您可以尝试向 OS-ERROR 添加检查,以检测可能不会显示在屏幕上但仍由操作系统抛出的错误。试试这个,希望我们能获得更多信息来尝试制定最终的解决方案
标签: windows batch-file executable-jar progress-4gl