从VBA调用时无法从批处理文件中捕获Java的输出

时间:2015-02-26 05:22:47

标签: java vba batch-file

我有一个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(如果重要的话)。

1 个答案:

答案 0 :(得分:0)

代码块内部的变量(在本例中为for循环)需要通过延迟扩展来调用。

setlocal enabledelayedexpansion
<other code>
FOR /f "delims=" %%J in (%JAR_CMD%) do set "output=%%J"
echo OUTPUT IS !output!