1

我有由 Windows 搜索服务索引的文件。我需要函数,它可以在文本文件中找到一些字符串。我在 PowerShell 中有脚本,但它不能正常工作。

function search {
    param($path, $word)

    $c = $path + "\%"
    $query = "SELECT
        System.ItemName, System.ItemPathDisplay
    FROM SystemIndex
    WHERE System.ItemPathDisplay LIKE '$c' AND CONTAINS('$word')"

    $ADOCommand = New-Object -ComObject ADODB.Command
    $ADOConnection = New-Object -ComObject ADODB.Connection
    $RecordSet = New-Object -ComObject ADODB.RecordSet
    $ADOConnection.Open("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")

    $RecordSet.Open($query, $ADOConnection) 
    try { $RecordSet.MoveFirst() }
    catch [System.Exception] { "no records returned" }
    while (-not($RecordSet.EOF)) {
        if ($locatedFile) { Remove-Variable locatedFile }
        $locatedFile = New-Object -TypeName PSObject
        Add-Member -InputObject $locatedFile -MemberType NoteProperty -Name 'Name' -Value ($RecordSet.Fields.Item("System.ItemName")).Value
        Add-Member -InputObject $locatedFile -MemberType NoteProperty -Name 'Path' -Value ($RecordSet.Fields.Item("System.ItemPathDisplay")).Value
        $locatedFile
        $RecordSet.MoveNext()
    }

    $RecordSet.Close()
    $ADOConnection.Close()
    $RecordSet = $null
    $ADOConnection = $null
    [gc]::Collect()  
}

如果$word = "Hello"它适用于我们拥有的文件

*一些文字*你好*一些文字*

在文件中,但不是当我们有没有空格的 Hello 时,例如:

你好世界

我们也不能搜索 when$word是一个短语,例如“Hello World”。

谁知道怎么修它?

4

1 回答 1

0

我相信问题出CONTAINS在您的查询中。您应该在搜索的词中添加星号 (*) 通配符。所以而不是:

 WHERE System.ItemPathDisplay LIKE '$c' AND CONTAINS('$word')

请试试:

WHERE System.ItemPathDisplay LIKE '$c' AND CONTAINS('*$word*')
于 2016-10-13T15:33:27.633 回答