0

我有一个 PowerShell 脚本,它比较昨天和今天的文件,以提供可以进一步加载到 Oracle 表中以满足报告需求的更改。我的麻烦是,在周末源系统没有变化的情况下,今天的文件与昨天的文件相比没有新的行(file1 和 file2 相同)。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

我可以添加什么来识别文件没有数据(只是空白/换行符),这样我就可以防止将空行加载到表中。任何帮助表示赞赏,在此先感谢。

4

2 回答 2

0

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

于 2019-02-22T22:13:57.367 回答
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
}
于 2019-02-21T23:12:29.780 回答