2015-09-14 102 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

相关问题