Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';当从VBA调用时,从批处理文件捕获Java的输出_Java_Vba_Batch File - Fatal编程技术网

Can';当从VBA调用时,从批处理文件捕获Java的输出

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

我有一个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”
,但它仍然没有在
输出变量中设置任何内容

更新:如果从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可执行文件。