2015-07-02 50 views
0

我必須打開並搜索很多目錄和.conf/.xml文件。我現在有這個權利:如何在.conf文件中查找文件路徑?

$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文件中使用正確的路徑的conf文件都位於一個txt文件我也將通過簡單地用.xml替換.conf文件來對.xml文件執行相同的操作。截至目前,我正在獲取.txt文件,但沒有路徑。我知道我錯過了一兩件事,但我無法弄清楚它是什麼。我將不得不手動改變我已經創建的新聞路徑。我想運行這個腳本來搜索所有帶有* \ log或* \ logs的.conf/.xml文件。

+0

我可以在這裏看到一些問題,包括一些冗餘。你可以包含一個.conf的小樣本,因爲它可能是任何內容。作爲輸出你期望什麼?它在文件中找到的匹配項? – Matt

+0

那麼基本的.conf文件對於日誌將有一個類似於「c:\ apache \ tomcat \ bin」的路徑。許多日誌文件都是分散的,搜索它們是一件麻煩事。至於輸出,我希望包含「\ log」的.conf文件的路徑。我希望搜索模式查找日誌的原始位置,以便我可以手動將它們更改爲集中的日誌文件夾系統。 – akang355

+0

我問的一件事是你能包含一個文件樣本嗎?那意味着你還想要匹配的線? – Matt

回答

0

您的正則表達式不會轉義反斜槓,它顯然不符合您作爲.conf文件的典型內容顯示的內容。另外它可以被簡化。試試這個 - 調整$ Text正則表達式以實際匹配.conf文件中的所需文本:

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

$PathArray = @(Get-Childitem $Path -Filter *.conf -Recurse -File | 
       Where {(Get-Content $_.FullName -Raw) -match $Text}) 

Write-Host "Contents of ArrayPath:" 
$PathArray 

$PathArray | Out-File $Results -Encoding ascii 
+0

感謝您的幫助。我會盡快對它進行測試。 – akang355

0

有幾個問題。基思得到了最大的一個,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 
+0

感謝您的幫助。非常感激 – akang355