比较对象 PowerShell 输出一个包含 2 个空行的 1KB 文件
Compare-Object PowerShell outputs a 1KB file with 2 null rows
我有一个 PowerShell 脚本,它比较昨天和今天的文件以提供可以进一步加载到 Oracle table 中以满足报告需要的更改。我的麻烦是,在周末,当源系统没有变化时,今天的文件与昨天的文件相比没有新行(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
我可以添加什么来识别文件没有数据(只有 blank/new 行字符),这样我就可以防止将空行加载到 table。感谢任何帮助,提前致谢。
它是 而不是 Compare-Object
产生 empty/null 行。
$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
}
正如@LotPings 在上面的回答中指出的那样,比较对象不是额外换行符的原因,而是下面的脚本将文件从 Little Endian 转换为 UTF8。在 If ((Get-Content $file_diff) -ne $Null)
条件
中移动编码转换脚本后,原始代码有效
我有一个 PowerShell 脚本,它比较昨天和今天的文件以提供可以进一步加载到 Oracle table 中以满足报告需要的更改。我的麻烦是,在周末,当源系统没有变化时,今天的文件与昨天的文件相比没有新行(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
我可以添加什么来识别文件没有数据(只有 blank/new 行字符),这样我就可以防止将空行加载到 table。感谢任何帮助,提前致谢。
它是 而不是 Compare-Object
产生 empty/null 行。
$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
}
正如@LotPings 在上面的回答中指出的那样,比较对象不是额外换行符的原因,而是下面的脚本将文件从 Little Endian 转换为 UTF8。在 If ((Get-Content $file_diff) -ne $Null)
条件