从batch file返回错误消息

我正在从VBA shellingbatch file,以启动exec文件,如Notepad.exe。 如果没有findexec文件,我想将一个指示或消息返回给VBA。 到目前为止,我已经通过让蝙蝠向文本文件写入消息来做到这一点,然后让VBA检查这个文件。 这种方法似乎有点不方便,但到目前为止,我还没有遇到一种替代方法。

@echo off set EM="C:\Msg.txt" if exist %EM% del %EM% set FL=%SystemRoot%\system32\xnotepad.exe if not exist %FL% ( echo %FL% not found > %EM% goto done ) Start "" %FL% :done 

Solutions Collecting From Web of "从batch file返回错误消息"

在VBA中,

 Dim oSHELL, batchname, usr, pass, exitcode Set oSHELL = VBA.CreateObject("WScript.Shell") usr="username" pass="password" batchname="batchFile.bat" ' Arguments ToRun, Style (0=hide), Waitforend exitcode = oSHELL.Run(""""+batchname+""" """+usr+""" """+pass+"""", 0, True) 

并在你的批次

 exit somenumber 

应该返回somenumber


我使用的实际代码:

 Sub q27097252() Dim oSHELL, batchname, usr, pass, exitcode Set oSHELL = VBA.CreateObject("WScript.Shell") usr = "" pass = "" batchname = "c:\106x\q27097252.bat" ' Arguments ToRun, Style (0=hide), Waitforend exitcode = oSHELL.Run("""" + batchname + """ """ + usr + """ """ + pass + """", 0, True) MsgBox (exitcode) End Sub 

用批量c:\106x\q27097252.bat

 @ECHO OFF SETLOCAL EXIT %time:~-1% GOTO :EOF 

在VBA代码编辑器/ F5中完美地运行(预期的结果是:messagebox随机显示0..9)


在使用Windows XP时评论/解决方案如下:

它会出现exit /b number选项只是设置错误errorlevelexit number实际上设置终止代码。
XP下的终止代码为0,因为cmd.exe实际上正常终止 – 而Windows 7(及更高版本)似乎将当前错误errorlevel指定为cmd.exe进程的退出代码。
因此,使用exit number优先考虑与XP兼容的代码调整,以适应。

你可以用EXIT命令来做到这一点。 看看EXIT /?