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)

这是我现在拥有的一部分。它正在检查日志文件中的错误并相应地调用该成功/失败邮件。现在,您在上面看到的 2 个 vbs 邮件脚本中硬编码了位置名称/编号。我确信有一种方法可以将参数传递给发送电子邮件的 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

但不工作...

提前致谢!

4

3 回答 3

7

要回答这个问题...

以这种方式调用您的脚本:

cscript //nologo success_mail_DEV.vbs  ARG1  ARG2

通过WScript.Arguments处理 vbscript 中的参数。


但我也可以建议您完全消除系统的批处理部分。

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

于 2012-06-29T15:59:48.037 回答
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

它正在工作。*一个人可以使用相同的技术传递多个参数。

于 2012-07-05T15:51:07.473 回答
0

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

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

当您调用 VBScript 时,只需将 arg 传递给脚本,就像您使用命令一样:

cscript //nologo MyScript.vbs arg
于 2012-06-29T16:01:00.247 回答