我正在尝试将多个文件与单个文档进行比较。我设法让那部分工作,但问题在于,我希望能够在比较运行之前检查文件是否存在。
即。检查文件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}
}
比较工作只需要在运行比较之前添加文件检查,因为它仍在为不存在的文件吐出结果。
非常感谢,
答案 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
}