我有一个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
答案 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
}