2015-09-14 72 views
0

我需要搜索,然後從多個txt文件中提取內容,然後將每個搜索結果保存爲單獨的txt文件。 serverabc.systeminfo.txt從多個txt文件中提取內容,然後根據文件夾保存文件。文件名

下面的工作原理會將所有結果返回到單個systeminfo.txt文件,該文件沒有列出結果來自哪個文件夾/文件。

理想情況下,我需要爲每個systeminfo提取單個文件輸出。在提取的文件夾中有多個文件夾,即abc123,def456等。每個文件需要搜索「abc軟件」或「def軟件」中的systeminfo文件,然後如果發現將結果輸出到單個文本文件,即abc123.systeminfo等。

一旦保存了這些文件,它們將與master.txt文件進行比較以獲得差異。

$path = "H:\Compare\Extracted" 
$Text = "abc Software" 
$Text2 = "def Software" 
$Results = "H:\Compare\Results\$($file.name).txt" 
$files = Get-ChildItem $path -recurse -Include *.txt 

foreach ($file in $files) { 
    Get-Content $file | 
     Select-String -Pattern $Text, $Text2 | 
     select line | 
     Out-File $Results -Append 
} 

回答

0

可變$file是未知的外面(特別是前)foreach循環。將$Results的定義放入循環中,並且代碼應該起作用。另外,我認爲您應該將-Expand添加到select聲明中以擴展Line屬性。

foreach ($file in $files) { 
    $Results = "H:\Compare\Results\$($file.Directory.Name + '.' + $file.Name).txt" 
    Get-Content $file | 
     Select-String -Pattern $Text, $Text2 | 
     select -Expand Line | 
     Out-File $Results -Append 
} 

使用$file.BaseName,而不是$file.Name,如果你想在不包括源文件的擴展名創建的輸出文件。

+0

嗨,這仍然返回所有結果到單個文件?我需要在H:\ compare \ extracted目錄中搜索文本字符串中的所有txt文件,並將找到的每個文件的結果返回到H:\ compare \ results \ foldername.filename。 – dragonhsv

+0

@dragonhsv我真的懷疑你是否在單個輸出文件中得到所有結果,除非你只有一個文件顯示匹配,或者你有多個同名的文件。請提供證據。要在輸出文件名中包含文件夾名稱,請參閱更新後的答案。 –

+0

謝謝,對不起有關混淆,我的錯誤你是正確的所有文件名是相同的只是不同的文件夾,即severrname是「abc123」文件名都是「systeminfo.txt」謝謝 – dragonhsv

相關問題