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 を呼び出して出力を処理する機能を完全に備えています。または、実際には、FINDSTR をまったく呼び出す必要なく、VBScript 内で完全に検索を実装することもできます。

于 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 を呼び出すときは、コマンドのように引数をスクリプトに渡すだけです。

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