0

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

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

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

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

4

3 回答 3

1

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

于 2013-11-01T17:27:50.483 回答
0

VBScript - Google for "VBscript search file contents"
结果,例如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 文件操作。

于 2013-11-01T18:28:11.410 回答
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
于 2013-11-01T20:19:23.907 回答