Windows 7批量搜索电子邮件地址

时间:2013-11-01 17:18:10

标签: windows vba sorting search batch-file

提前感谢您的帮助。我必须在我的办公室计算机上执行任务,这意味着我无法安装任何其他软件,所以我认为批处理文件可能是最简单的方法,即使它不是最有效的(尽管我欢迎其他解决方案,我可能无法在我的办公室计算机上安装软件。另外,请记住,我的答案编程经验非常少:)

基本上,我有一个包含一系列子文件夹的文件夹,每个文件夹都包含各种类型的文件(文本,电子邮件,基于文本的pdf,文档文档)。我还有一个包含数百个电子邮件地址的文本文件(或excel列)。我想使用批处理文件(或类似的方法)来运行列表中的每个电子邮件地址,并搜索每个文件夹中的各种文件的内容,如Windows Search。包含搜索短语的文件应自动移动到预先指定的文件夹(可能必须重命名或放入新的子文件夹,因为许多这些文件可能具有相同的名称)。最后,我们应该有一个文件夹(以及它的子文件夹),其中不包含其内容中列表中任何电子邮件地址的文件,另一个文件夹中只包含内容包含其中的电子邮件地址的文件文件(这些文件可以在子文件夹中,也可以重命名,或者是最方便的,只是不删除)。

(由于电子邮件地址列表在Excel中,我可以使用的另一个选项是使用某种VBA宏,如果它能够递归搜索文件夹中的文件内容。)

我希望这是有道理的,我很乐意澄清它是否合理。再次感谢您提供的任何帮助!

3 个答案:

答案 0 :(得分:1)

自Windows 95以来,所有Windows计算机上都有编程语言调用vbscript。这可能会起作用。我认为你可以批量做到这一点。而且它已经过时了。

答案 1 :(得分:0)

VBScript - Google for" VBscript搜索文件内容"
http://www.codeproject.com/Questions/524842/VbscriptplusToplussearchplusforplusaplusstringplus这样的结果应该会有所帮助。此外,如果您在使用递归文件夹搜索部分http://blogs.technet.com/b/heyscriptingguy/archive/2004/10/20/how-can-i-get-a-list-of-all-the-files-in-a-folder-and-its-subfolders.aspx时遇到问题可能会有所帮助。

VBScript几乎与VBA完全相同。如果您愿意,可以修改该代码以在Excel中作为宏运行。

如果您正在处理unicode文件,我建议使用FileSystemObject和TextStreams而不是本机VBA文件操作。

答案 2 :(得分:0)

这是一个简单的VBA例程,它使用ADO Provider查询Windows桌面搜索。这个脚本是我迄今为止唯一的体验,所以如果您有任何疑问,可以在这里查看:http://msdn.microsoft.com/en-us/library/windows/desktop/bb231256(v=vs.85).aspx

查找文件是相对棘手的部分 - 移动它们应该很容易; _0

Sub Tester()

    Set objConnection = CreateObject("ADODB.Connection")
    Set objRecordset = CreateObject("ADODB.Recordset")

    objConnection.Open "Provider=Search.CollatorDSO;" & _
                       "Extended Properties='Application=Windows';"

    objRecordset.Open "SELECT System.ItemName, System.ItemFolderPathDisplay " & _
                      " FROM SystemIndex" & _
                      " WHERE SCOPE = 'file:C:/_Stuff/local files' " & _
                      " and contains('joe@corp.com')", objConnection

    If Not objRecordset.EOF Then
        objRecordset.MoveFirst
        Do Until objRecordset.EOF
            With objRecordset.Fields
                Debug.Print .Item("System.ItemName"), _
                            .Item("System.ItemFolderPathDisplay")
            End With
            objRecordset.MoveNext
        Loop
    Else
        Debug.Print "no records found"
    End If

    objRecordset.Close
    Set objRecordset = Nothing
    objConnection.Close
    Set objConnection = Nothing

End Sub