如何使用Powershell比较对象比较最后两个修改的文件

时间:2018-11-23 13:11:28

标签: powershell

我有一个powershell脚本,可以根据用户选择比较两个文件,但是我想比较最后两个修改的文件而无需询问用户输入

    Set-ExecutionPolicy Unrestricted -force
cd\
cd .\script
Write-Host " "
Write-Host "Available Files "
Write-Host "================="
Get-ChildItem | Format-table -Property Name -HideTableHeaders
$file = 'c:\script\mismatchfound.txt'
$ref = get-content (Read-Host "Enter Reference FileName")
$dif = get-content (Read-Host "Enter Difference FileName")
Compare-Object -ReferenceObject $ref  -DifferenceObject $dif  -CaseSensitive | Format-table InputObject, SideIndicator -Autosize | out-file $file -Width 200 

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

$FilePath = '.\path\to\your\files'
$File = 'c:\script\mismatchfound.txt'
$CompareFiles = Get-ChildItem $FilePath -File | Sort-Object LastWriteTime | Select-Object -Last 2

If ($Files.count -eq 2) {
    $Ref = get-content $CompareFiles[0]
    $Dif = get-content $CompareFiles[1]

    Compare-Object -ReferenceObject $ref  -DifferenceObject $dif  -CaseSensitive | Format-table InputObject, SideIndicator -Autosize | out-file $file -Width 200 
}
Else{
    Write-Error '2 files not returned.'
}

这使用Get-ChildItem仅返回$FilePath中指定路径中的文件。然后,它使用Sort-Object按文件的LastWriteTime属性对其进行排序。然后,它使用Select-Object仅过滤该集合中返回的最后两个对象。

然后,我们使用if来验证我们有两个文件,如果有,则将它们放在$Ref$Dif变量中,并根据您的使用情况使用Compare-Object代码。

如果未返回两个文件,则返回错误。

答案 1 :(得分:0)

您可以使用write-host而不是write-error,它可以在所有版本的Powershell中使用

cd\
cd .\Scripts
$File = 'c:\script\mismatchfound.txt'
$CompareFiles = Get-ChildItem -File  | Sort-Object LastWriteTime | Select-Object  -Last 2
If ($Files.count -eq 2) {
    $Ref = get-content ($CompareFiles[0])
    $Dif = get-content ($CompareFiles[1])

    Compare-Object -ReferenceObject $ref  -DifferenceObject $dif  -CaseSensitive | Format-table InputObject, SideIndicator -Autosize | out-file $file -Width 200 
} Else {
    Write-Host "File missing " -ForegroundColor White -BackgroundColor Red
}
相关问题