如何从批处理(.bat)传递参数到VBScript(.vbs)?

6
如何从批处理传递参数到VBScript?我的批处理脚本在自动执行结束时发送电子邮件。为此,它使用/调用我的VBScript(email.vbs),该脚本通过附加实际日志文件(包含该执行的结果)来发送电子邮件。 所有这些日志文件都存储在特定的文件夹中,例如:201207(2012年7月),201208(2012年8月)等...... 我想将文件夹名称或其中一部分(我考虑硬编码2012部分并通过批处理从该参数获得月份编号)作为参数传递给我的email.vbs,以便它可以查找正确的文件夹来获取正确的日志文件。有道理吗?
ECHO Checking the log file for errors...
FINDSTR /C:"RC (return code) = 0" %workDir%\%filenm%_Log.txt && (ECHO Deployment was successful. 
ECHO Email is sent out...
cscript //nologo success_mail_DEV.vbs %workDir%  'passing the directory param. here.
ECHO Press ENTER to exit...
GOTO offshore) || (ECHO Deployment was not successful. Errors were found!
ECHO Email is sent out...
ECHO Press ENTER to exit...
cscript //nologo fail_mail_DEV.vbs %workDir%  'and here
GOTO offshore)

这是我目前的一部分内容。它正在检查日志文件中的错误,并相应地调用成功/失败邮件。现在,这两个邮件脚本中的位置名称/编号是硬编码的。我确信有一种方法可以通过某个参数传递到电子邮件vbscript中。但是,我不知道如何操作。
这是我的邮件vbscript:
Const ForReading = 1

Set args = WScript.Arguments
directory = args.Item(0) 'thought that workDir would come in here


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(&directory&"\filename.txt", ForReading)
fileName = objTextFile.ReadLine

Dim ToAddress
Dim FromAddress
Dim MessageSubject
Dim MyTime
Dim MessageBody
Dim MessageAttachment
Dim ol, ns, newMail
MyTime = Now

ToAddress = "destination@email.com"
MessageSubject = "SUCCESS"
MessageBody = "It was successful" 
MessageAttachment = &directory&"\"&fileName&"_Log.txt"
Set ol = WScript.CreateObject("Outlook.Application")
Set ns = ol.getNamespace("MAPI")
Set newMail = ol.CreateItem(olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody & vbCrLf & MyTime
newMail.RecipIents.Add(ToAddress)
newMail.Attachments.Add(MessageAttachment)
newMail.Send

objTextFile.Close

但是没有生效...

提前感谢!

3个回答

7
回答这个问题的方法是...
以这种方式调用您的脚本:
cscript //nologo success_mail_DEV.vbs  ARG1  ARG2

通过WScript.Arguments在VBScript中处理参数。


但我想建议您完全消除系统中的批处理部分。

VBScript完全能够调用FINDSTR并处理输出。或者,实际上您可以完全在VBScript中实现搜索,而不需要调用FINDSTR。


谢谢您的迅速回复。我查看了您发给我的链接,感谢。但是还是不能用,请问有什么想法吗?我刚刚编辑了我的原始问题,并附上了我所做的更改。 - duper
没关系。虽然谢谢你的第一次输入。一切都很好,程序正在运行。 - duper
非常晚了,但你真的应该将这个标记为答案。 - narfie

3

好的,我更新了我之前的问题。在大家的帮助下,它终于可以正常工作了。 谢谢。 这是我如何调用vbscript并传递参数:

cscript //nologo fail_mail.vbs something.sql 'something.sql is the param. that i'm passing.

这是我的邮件vbscript的样式:

Const ForReading = 1

Set args = WScript.Arguments
arg1 = args.Item(0)  'the parameter from batch comes in here to arg1
...
...
ToAddress = "my@address.com"
MessageSubject = "WORKED"
MessageBody = "Success" 
MessageAttachment = ""&arg1&""  'here those quotes are important. dk why.
Set ol = WScript.CreateObject("Outlook.Application")
Set ns = ol.getNamespace("MAPI")
Set newMail = ol.CreateItem(olMailItem)
newMail.Subject = MessageSubject
newMail.Body = MessageBody & vbCrLf & MyTime
newMail.RecipIents.Add(ToAddress)
newMail.Attachments.Add(MessageAttachment)
newMail.Send

它正在运行。 *可以使用相同的技术传递多个参数。


0

你的VBScript需要一些代码来接收参数,例如:

set args = WScript.Arguments
' Parse args
select case args.Count
case 0
    help
case 1
    sVariable = args(0)
end select

当您调用VBScript时,只需像执行命令一样将参数传递给脚本:

cscript //nologo MyScript.vbs arg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接