我有一个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
我可以添加些什么来识别文件没有数据(只是空白/换行符),以便防止将空行加载到表中。感谢您的任何帮助。
答案 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)
条件下移动编码转换脚本后,原始代码正常工作