Can';当从VBA调用时,从批处理文件捕获Java的输出
我有一个jar文件,它将代码打印到控制台 为了调用这个jar并捕获输出,我有一个如下的批处理文件Can';当从VBA调用时,从批处理文件捕获Java的输出,java,vba,batch-file,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 CLASSP
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”
,但它仍然没有在输出变量中设置任何内容
更新:如果从VBA调用批处理文件,则不会从批处理文件中调用Java。但如果直接从cmd windows调用批处理文件,则可以工作
任何帮助都将不胜感激。谢谢你抽出时间
我已经在64位windows 7上安装了32位/64位jdk/jre(如果有必要)。代码块(在本例中为for循环)内的变量需要通过延迟扩展进行调用
setlocal enabledelayedexpansion
<other code>
FOR /f "delims=" %%J in (%JAR_CMD%) do set "output=%%J"
echo OUTPUT IS !output!
setlocal enabledelayedexpansion
对于/f“delims=“%%J in(%JAR_CMD%)设置“output=%%J”
回波输出是!输出!
既然您在Excel VBA中使用WshShell,为什么不跳过批处理文件位,使用类似于设置oExec=Exec(JAR\u CMD\u x)
然后如果不是oExec.StdOut.AtEndOfStream,那么sOut=oExec.StdOut.ReadAll()
?在VBA转换成Java之后,你应该是什么样的人。但是由于需求,我需要这样做(vba->batch->java)。java没有被调用或者你的.jar文件没有被执行?/r..\lib的使用了一个相对路径,该路径表示当前的active directory。如果当前active directory不是从vba执行时您所认为的,则代码将找不到所需的元素。@MCND我已将所需的库放置在相应的路径中。我的罐子工作正常。我登录到jar中的一个文件,如果从cmd窗口调用,则会打印日志文件。@MinNaingOo,场景1(从cmd调用)-您从包含它的同一文件夹调用cmd,所有操作都会正常执行。场景2(vba)-当前active directory不是cmd文件夹,因此。\lib
未找到库。从这里开始,问题是当从VBA调用时,没有运行的是jar文件还是java可执行文件。