匹配两个文件中的数据,然后通过电子邮件发送给每个人

Match Data In Two Files Then Email Each Person

为简单起见,file1.txt 是一个日志文件,我将其 logonIds 提取到一个数组中。 File2.txt 包含 logonID、emailAddress、other、needless、data 行

我需要将所有从 file1 读取到我的数组中的 logonID,并从 file2 中提取它们的电子邮件地址。获得此信息后,我便可以向 file1 中的每个人发送一封电子邮件。不能只使用 file2.txt,因为它包含不应接收电子邮件的用户。

我编写了 vbscript,它从 file1.txt 中提取登录 ID 到数组中,并从 file2.txt

中提取登录 ID 和电子邮件
inFile1 = "C:\Scripts\testvbs\wscreatestatus.txt"
inFile2 = "C:\Scripts\testvbs\WSBatchCreateBuildsList.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objInFile1 = objFSO.OpenTextFile(inFile1, ForReading)
Set objInFile2 = objFSO.OpenTextFile(inFile2, ForReading)

'Creates Array of all DomainIDs for successful deployments
Do Until objInFile1.AtEndOfStream 
    strNextLine = objInFile1.Readline
    arrLogons = Split(strNextLine , vbTab)
        If arrLogons(0) = "DEPLOYSUCCESS" Then
             arrUserIDList = arrUserIDList & arrLogons(5) & vbCrLf
        End If  
Loop

Do Until objInFile2.AtEndOfStream 
    strNextLine = objInFile2.Readline
    arrAddressList = Split(strNextLine , ",")
    arrMailList = arrMailList & arrAddressList(0) & vbTab & arrAddressList(1) & vbCrLf

Loop

接下来我需要做的是获取我的用户 ID 列表 "arrUserIDList",并从 arrMailList 中提取他们的电子邮件地址。有了这些信息,我可以向 file1.txt (wscreatestatus.txt) 中的每个用户发送一封电子邮件。

谢谢!

根据您构建 arrMailList 的方式,我推测您希望将选定的 LogonID 和相应的电子邮件地址输出到一个新的制表符分隔的文本文件中。

如果是这种情况,我建议使用 ArrayList 对象来存储值。ArrayLists 有一个易于使用的 Add 方法,为了测试一个项目是否在 ArrayList 中,有 Contains方法。

在代码中:

Option Explicit

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Dim inFile1, inFile2, outFile, objFSO, objInFile, objOutFile
Dim strNextLine, fields, arrUserIDList, arrMailList

inFile1 = "C:\Scripts\testvbs\wscreatestatus.txt"
inFile2 = "C:\Scripts\testvbs\WSBatchCreateBuildsList.txt"
outFile = "C:\Scripts\testvbs\WSEmailDeploySuccess.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objInFile = objFSO.OpenTextFile(inFile1, ForReading)

'Create an ArrayList of all DomainIDs for successful deployments
Set arrUserIDList = CreateObject( "System.Collections.ArrayList" )

Do Until objInFile.AtEndOfStream
    strNextLine = objInFile.Readline
    fields = Split(strNextLine , vbTab)
    If fields(0) = "DEPLOYSUCCESS" Then
         arrUserIDList.Add fields(5)
    End If
Loop

'close the first input file
objInFile.Close

'Now read the second file and read the logonID's from it
Set objInFile = objFSO.OpenTextFile(inFile2, ForReading)

'Create an ArrayList of all LogonID's, a TAB character and the EmailAddress
Set arrMailList = CreateObject( "System.Collections.ArrayList" )

Do Until objInFile.AtEndOfStream
    strNextLine = objInFile.Readline
    fields = Split(strNextLine , ",")
    If arrUserIDList.Contains(fields(0)) Then
        ' store the values in arrMailList as TAB separated values
        arrMailList.Add fields(0) & vbTab & fields(1)
    End If
Loop

'close the file and destroy the object
objInFile.Close
Set objInFile = Nothing

Set objOutFile = objFSO.OpenTextFile(outFile, ForWriting, True)
For Each strNextLine In arrMailList
    objOutFile.WriteLine(strNextLine)
Next

'close the file and destroy the object
objOutFile.Close
Set objOutFile = Nothing

'clean up the other objects
Set objFSO = Nothing
Set arrUserIDList = Nothing
Set arrMailList = Nothing

希望对您有所帮助

这就是我解决问题的方法,但我认为 Theo 采取了更好的方法。

Const ForReading = 1
Const ForWriting = 2

Dim inFile1, inFile2, strNextLine, arrServiceList, arrUserList
Dim arrUserDeployList, strLine, arrList, outFile, strItem1, strItem2

inFile1 = Wscript.Arguments.Item(0) 'wscreatestatus.txt file (tab delimited)
inFile2 = Wscript.Arguments.Item(1) 'WSBatchCreateBuildsList.txt (comma delimited)
outFile = Wscript.Arguments.Item(2) 'SuccessWSMailList###.txt (for Welcome emails)

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objInFile1 = objFSO.OpenTextFile(inFile1, ForReading)
Set objInFile2 = objFSO.OpenTextFile(inFile2, ForReading)
Set objOutFile = objFSO.CreateTextFile(outFile, ForWriting, True)

'Extracts Logon ID's for successfull deployments into an Array
'#================================================================
i = 0
Do Until objInFile1.AtEndOfStream 
    ReDim Preserve arrUsers(i)
        strNextLine = objInFile1.Readline
        arrLogons = Split(strNextLine , vbTab)
            If arrLogons(0) = "PENDINGREQUESTS" Then
                arrUsers(i) = arrLogons(5)
                i = i + 1
            End If  
    Loop

'Extracts success deploy email addresses and writes to file
'#================================================================
Do Until objInFile2.AtEndOfStream 
    ReDim Preserve arrMailList(i)
    strNextLine = objInFile2.Readline
        arrAddressList = Split(strNextLine , ",")
        strItem1 = arrAddressList(0)
        strItem2 = arrAddressList(1)
            For Each strArrayEntry In arrUsers
                If strArrayEntry = strItem1 Then 
                     objOutFile.WriteLine strItem1 & "," & strItem2 
                End If
            Next
    i = i + 1
    Loop

objOutFile.Close
objInFile1.Close
objInFile2.Close