如何在.conf文件中查找文件路径?

时间:2015-07-02 14:14:52

标签: powershell

我必须打开并搜索很多目录和.conf / .xml文件。我现在有这个:

$Path = "D:\Logs"

$Text = "*\log"

$PathArray = @()

$Results = "D:\Logs\Search.txt"

Get-Childitem $Path -Filter "*.conf" -Recurse | 
    Where-Object {$_.Attributes -ne "Directory"} | 
        ForEach-Object
        {
            If (Get-Content $_.FullName | Select-String -Pattern $Text -AllMatches)
            {
                $PathArray += $_.FullName
                $PathArray += $_.FullName
            }
        }

Write-Host "Contents of ArrayPath:"
$PathArray | ForEach-Object {$_}

$PathArray | % {$_} | Out-File “D:\Logs\Search.txt” 

我正在尝试创建此脚本,因此我可以使用.conf文件所在的正确路径将文件报告到txt文件中的所有.conf文件。我也会对此进行相同操作。简单地用.xml替换.conf文件.xml文件。截至目前,我正在获取.txt文件,但没有路径。我知道我错过了一两件事,但我无法弄清楚它是什么。我将不得不用我已创建的新闻手动更改旧路径。我想运行此脚本来搜索所有带有* \ log或* \ logs的.conf / .xml文件。

2 个答案:

答案 0 :(得分:0)

你的正则表达式没有逃避反斜杠的问题,它显然与你所显示的.conf文件的典型内容不匹配。此外,它可以简化。试试这个 - 调整$ Text正则表达式以实际匹配.conf文件中的所需文本:

select now()::date;
    now     
------------
 2015-07-03
(1 row)

答案 1 :(得分:0)

有几个问题。 Keith最大的一个是Select-String默认使用正则表达式。同样,您有一些冗余,例如两次添加$pathArray并使用ForEach-Object {$_}

我想展示仍然使用select-string的解决方案,但使用其中的一些开关来获取您想要的用途。主要是-simplematch,它按字面意思处理模式而不是正则表达式。我看到一个下划线引导示例文本中的日志,所以我在这里使用它。如果您不想或与您的数据不匹配,只需将其删除即可。

$Path = "D:\Logs"
$Text = "_log"
$Results = "D:\Logs\Search.txt"

$PathArray = Get-Childitem $Path -Filter "*.conf" -Recurse | 
    Where-Object {$_.Attributes -ne "Directory"} | 
    Where-Object{Select-string $_ -Pattern $Text -SimpleMatch -Quiet} |
    Select-Object -ExpandProperty FullName

# Show results on screen
$PathArray

# Export results to file
$PathArray | Set-Content $Results