Powershell - 将多个文件与单个csv文件进行比较

时间:2015-10-05 20:58:55

标签: powershell

我正在尝试将多个文件与单个文档进行比较。我设法让那部分工作,但问题在于,我希望能够在比较运行之前检查文件是否存在。

即。检查文件A是否存在,如果是,则与主csv文件进行比较,如果不继续,则检查文件b是否存在,如果是,则与master csv进行比较,依此类推。

到目前为止我的脚本是:

$files = get-content -path "H:\Compare\File Location\servername Files.txt"
$prod = "H:\compare\Results\master_SystemInfo.csv"

foreach ($file in $files) {

If((Test-Path -path $file))
{
    Write-Host "File exists, comparing against production"

    $content1 = Get-Content "H:\Compare\Results\$file" 
    $content2 = Get-Content $prod

    $comparedLines = Compare-Object $content1 $content2 -IncludeEqual | 
    Sort-Object { $_.InputObject.ReadCount } 

    $lineNumber = 0 
    $comparedLines | foreach {
        $pattern = ".*"

        if($_.SideIndicator -eq "==" -or $_.SideIndicator -eq "=>") 
        { 
            $lineNumber = $_.InputObject.ReadCount 
        } 

        if($_.InputObject -match $pattern) 
        { 
            if($_.SideIndicator -ne "==") 
            { 
                if($_.SideIndicator -eq "=>") 
                { 
                    $lineOperation = "prod" 
                } 
                elseif($_.SideIndicator -eq "<=") 
                { 
                    $lineOperation = "test" 
                } 

                [PSCustomObject] @{ 
                    Line = $lineNumber 
                    File = $lineOperation 
                    Text = $_.InputObject  
                } 
            } 
        } 
    } | Export-Csv "h:\compare\Comparison Reports\Prod.vs.$file" -  NoTypeInformation

}
Else
{ "File does not exist, aborting" ; return}
}

比较工作只需要在运行比较之前添加文件检查,因为它仍在为不存在的文件吐出结果。

非常感谢,

1 个答案:

答案 0 :(得分:0)

我通过更改代码找到了答案,这次我只是从文件夹中的文件创建一个txt文件,这样我就不需要测试路径了。现在,这会从文件夹生成一个文件列表,然后将每个文件与主文件进行比较并输出多个文件,每个文件对应一个文件,保存为原始文件名,即“Prod.vs._SystemInfor.csv”

仅供参考 - 在第一行中,abc123 *是我输入的变量,用于查找文件夹中的特定服务器名称,并仅根据这些名称生成文件列表。我们有许多服务器都具有相似的命名约定,只是后4位数根据它们所在的位置而不同。

由于

Working Powershell脚本:

Get-ChildItem -file abc123* H:\Compare\Results -Name | Out-File "H:\Compare\Results\Office Files.txt"
$officefiles = get-content -path "H:\Compare\results\Office Files.txt"

$officeprod = "H:\compare\Results\master_SystemInfo.csv"


foreach ($officefile in $officefiles) {

$content1 = Get-Content "H:\Compare\Results\$officefile" 
$content2 = Get-Content $officeprod

$comparedLines = Compare-Object $content1 $content2 -IncludeEqual | 
Sort-Object { $_.InputObject.ReadCount } 

$lineNumber = 0 
$comparedLines | foreach {
$pattern = ".*"

  if($_.SideIndicator -eq "==" -or $_.SideIndicator -eq "=>") 
{ 
    $lineNumber = $_.InputObject.ReadCount 
} 

if($_.InputObject -match $pattern) 
{ 
    if($_.SideIndicator -ne "==") 
    { 
        if($_.SideIndicator -eq "=>") 
        { 
            $lineOperation = "prod" 
        } 
        elseif($_.SideIndicator -eq "<=") 
        { 
            $lineOperation = "test" 
        } 

        [PSCustomObject] @{ 
            Line = $lineNumber 
            File = $lineOperation 
            Text = $_.InputObject  
        } 
    } 
} 
} | Export-Csv "h:\compare\Comparison Reports\Prod.vs.$officefile" -NoTypeInformation


}