我有一个jar文件,可以将代码打印到控制台。
要调用该jar并捕获输出,我有一个这样的批处理文件。
set JAVA_HOME=C:\Program Files\Java\jre7
set PATH=C:\WINDOWS\;C:\WINDOWS\SYSTEM32\;%JAVA_HOME%\bin;
setlocal ENABLEDELAYEDEXPANSION
if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;.) else (set CLASSPATH=.)
FOR /R ..\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G
set JAR_CMD='java -Xms256M -Xmx256M -classpath D:\libs\Test.jar com.mno.Main %*'
REM ---------PROBLEM SEEMS TO BE HERE---------
FOR /f "delims=" %%J in (%JAR_CMD%) do set "output=%%J"
echo OUTPUT IS %output%
当我从cmd运行该bat文件时,它会在控制台上打印Jar输出。 (例如,“OUTPUT IS Hello”,其中“Hello”输出jar)
我必须使用WshShell从excel vba调用该批处理文件。但是如果我从vba运行该批次,我只得到“OUTPUT IS”。
for循环似乎导致问题。我将 "output=%%J"
更改为"output=TESTING"
,但仍未将任何内容设置为output variable
。
更新:如果从VBA调用Java,则不会从批处理文件中调用Java。但是如果直接从cmd窗口调用批处理文件,则可以正常工作。
非常感谢任何帮助。谢谢你的时间。
我在64位Windows 7上安装了32位/ 64位jdk / jre(如果重要的话)。
答案 0 :(得分:0)
代码块内部的变量(在本例中为for循环)需要通过延迟扩展来调用。
setlocal enabledelayedexpansion
<other code>
FOR /f "delims=" %%J in (%JAR_CMD%) do set "output=%%J"
echo OUTPUT IS !output!