比较对象PowerShell输出具有2个空行的1KB文件

时间:2019-02-21 21:23:06

标签: powershell compareobject

我有一个PowerShell脚本,该脚本比较了昨天和今天的文件,以提供可以进一步加载到Oracle表中以满足报告需求的更改。我的麻烦是,在周末,当源系统没有更改时,与昨天的文件相比,今天的文件中没有新行(文件1和文件2相同)。 Compare-Object仍会生成一个输出文件,该文件仅具有换行符。我在这个论坛上搜索了可能遇到类似问题的任何人,以下是我到目前为止尝试过的事情。

初始代码:

Compare-Object -ReferenceObject $(Get-Content $filenew) -DifferenceObject $(Get-Content $fileold) |
    Where-Object SideIndicator -eq '<=' |
    %{$_.Inputobject + $_.SideIndicator} |
    ft -Auto |
    Out-File $file_diff -Width 5000

我尝试将下面的代码添加到我的代码中,但这仍然无济于事

$filen = Get-Item "D:\DevelopTest\DEV\Test\File2.txt"
$fileo = Get-Item "D:\DevelopTest\DEV\Test\File1.txt"

Compare-Object -ReferenceObject $(Get-Content $filenew) -DifferenceObject $(Get-Content $fileold) |
    Where-Object SideIndicator -eq '<=' |
    %{$_.Inputobject + $_.SideIndicator} |
    ft -Auto |
    Out-File $file_diff -Width 5000

(gc "D:\DevelopTest\DEV\Test\File.txt") |
    ? {$_.Trim() -ne "" } |
    Set-Content $file_diff

我可以添加些什么来识别文件没有数据(只是空白/换行符),以便防止将空行加载到表中。感谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

不是 Compare-Object会产生空/空行。

$filenew = Get-Item "D:\DevelopTest\DEV\Test\File2.txt"
$fileold = Get-Item "D:\DevelopTest\DEV\Test\File1.txt"

$Differences = Compare-Object -Ref (Get-Content $filenew) -Diff (Get-Content $fileold)

if ($Differences.Count){
    $Differences | ForEach-Object{
        $_.Inputobject + $_.SideIndicator
    } | Out-File $file_diff -Width 5000
}

答案 1 :(得分:0)

正如@LotPings在上面的答案中所指出的,compare-object并不是产生多余换行符的原因,而是它下面的脚本将文件从Little Endian转换为UTF8。在If ((Get-Content $file_diff) -ne $Null)条件下移动编码转换脚本后,原始代码正常工作