Getting Results From VBScript

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Post Reply
Message
Author
shadeclan
Posts: 61
Joined: 02 Jun 2011 11:29
Location: USA - Somewhere between Albany NY and Bennington VT

Getting Results From VBScript

#1 Post by shadeclan » 14 Oct 2011 12:59

I'm not exactly sure what I'm doing wrong here. Per an individual who provided a great answer to a related question, I wrote the following batch file:

Code: Select all

@echo off
setlocal
   set msgbox="msgbox.vbs"
   
   @echo:wscript.quit(msgbox(wscript.arguments(0),wscript.arguments(1),wscript.arguments(2))) > %msgbox%

   cscript //nologo %msgbox% "Test Message" 1 "Test Title"

   @echo:%errorlevel%
   pause

endlocal
exit /b


Whenever I execute the batch script, the return code is always zero [0]. So, I ditched the message box and just tried returning any old integer...

Code: Select all

@echo off
setlocal

   @echo:wscript.quit(1) > msgbox.vbs

   cscript msgbox.vbs

   echo:%errorlevel%
   pause

endlocal
rem exit /b

... and that doesn't work either.

I'm thinking that there is something wrong with my environment. Is there some sort of switch that needs to be set in order to make this work?

aGerman
Expert
Posts: 4654
Joined: 22 Jan 2010 18:01
Location: Germany

Re: Getting Results From VBScript

#2 Post by aGerman » 14 Oct 2011 13:10

Both scripts are working for me and actually I have no clue why they won't work for you.

Regards
aGerman

shadeclan
Posts: 61
Joined: 02 Jun 2011 11:29
Location: USA - Somewhere between Albany NY and Bennington VT

Re: Getting Results From VBScript

#3 Post by shadeclan » 14 Oct 2011 13:29

aGerman wrote:Both scripts are working for me and actually I have no clue why they won't work for you.

Regards
aGerman
There must be something wrong with my computer.

In an attempt at an alternate route, I decided to try creating a file from which I could read a result:

Code: Select all

Dim objFS
Dim objOut

Set objFS = CreateObject("Scripting.fileSystemObject")
Set objOut = objFS.CreateTextFile("Result.txt", TRUE)

objOut.WriteLine("s")
objOut.Close

set objFS = Nothing

WScript.Quit(0)
After a little wrangling, I found out that my fileSystemObject (scrrun.dll) was not registered! I got this code to work after I registered the thing.

I'm thinking that, maybe there is a problem with some other dll connected with VBScript that is not propagating the return value to the errorlevel variable. Anybody have any idea what object that might be?

shadeclan
Posts: 61
Joined: 02 Jun 2011 11:29
Location: USA - Somewhere between Albany NY and Bennington VT

Re: Getting Results From VBScript

#4 Post by shadeclan » 17 Oct 2011 12:29

Well, the following code (in a round-about manner) provides me with what I need in spite of the WScript.Quit function not providing me a proper return code for whatever reason:

Code: Select all

@echo off
setlocal
   set "vMsgBx=msgbox.vbs"
   set "vRsltTxt=Results.txt"
   set "vRslt=vRslt"

   @echo:'Message Box VBScript > %vMsgBx%
   @echo:Dim oFS >> %vMsgBx%
   @echo:Dim oTxtFile >> %vMsgBx%
   @echo:Dim vRslt >> %vMsgBx%
   @echo. >> %vMsgBx%
   @echo:Set oFS = CreateObject("Scripting.FileSystemObject") >> %vMsgBx%
   @echo:Set oTxtFile = oFS.CreateTextFile("%vRsltTxt%", True) >> %vMsgBx%
   @echo. >> %vMsgBx%
   @echo:vRslt = msgbox(wscript.arguments(0),wscript.arguments(1),wscript.arguments(2)) >> %vMsgBx%
   @echo. >> %vMsgBx%
   @echo:oTxtFile.WriteLine(vRslt) >> %vMsgBx%
   @echo:oTxtFile.Close >> %vMsgBx%
   @echo. >> %vMsgBx%
   @echo:WScript.Quit(vRslt) >> %vMsgBx%

   cscript %vMsgBx% //nologo "Some message" 1 "Some title"
   set /p vRslt=<%vRsltTxt%

   del %vMsgBx%
   del %vRsltTxt%

   @echo:Message Box Result = %vRslt%
   pause

endlocal
exit /b 0

Wish I knew why the wscript.quit function wasn't working. :?

nitt
Posts: 218
Joined: 22 Apr 2011 02:43

Re: Getting Results From VBScript

#5 Post by nitt » 17 Oct 2011 13:30

Code: Select all

@echo off
set body=Do you wish to open Notepad.exe?
set title=Alert
set type=vbyesno

echo x=msgbox("%body%",%type%,"%title%") : wscript.stdout.writeline(x) > ~tmp.vbs
for /f "tokens=*" %%a in ('cscript //nologo ~tmp.vbs') do (
set results=%%a
)

del ~tmp.vbs

if "%results%"=="6" start notepad


You want to add the line "wscript.stdout.writeline" at the end of your VBScript, and then you can put the output there and use "for /f" to retrieve it. Here, if you press "yes" then it will open notepad. "6" is the value of the "yes" (vbyes) button in VBScript.

Post Reply