我正在从VBA攻击批处理文件,以启动exec文件,例如Notepad.exe。如果找不到exec文件,我想将指示或消息返回给VBA。到目前为止,我一直在通过让bat将消息写入文本文件,然后让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
答案 0 :(得分:2)
,
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
应该{{1}}返回somenumber
我使用的实际代码:
exitcode
批处理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
在VBA代码编辑器/ F5中完全适合我(预期结果:消息框随机显示0..9)
使用Windows XP时的评论/解决方案:
@ECHO OFF
SETLOCAL
EXIT %time:~-1%
GOTO :EOF
选项只会设置exit /b number
,而errorlevel
实际设置终止代码。
终止代码在XP下为0,因为exit number
实际上正常终止 - 而Windows 7(及更高版本)似乎将当前cmd.exe
指定为errorlevel
进程的退出代码。
因此,请优先使用cmd.exe
与XP兼容 - 代码经过调整以适应。
答案 1 :(得分:-1)
您可以使用EXIT命令执行此操作。看看EXIT /?