Powershell比较文件日期不一致

时间:2019-02-17 13:53:53

标签: powershell

在使用月份格式比较文件的最后写入时间时,我遇到了一个奇怪的问题。当文件日期非常不同时,该比较似乎适用于某些文件日期,但是如果相隔数月之久则比较无效。我想知道是否有人提出建议?一如既往,我们将不胜感激。

[datetime]$UpdateFileDate = (Get-ItemProperty -Path  $FileUpdatePath).LastWriteTime
[datetime]$InstalledVersion = (Get-ItemProperty -path $FilePath).LastWriteTime
$file = Get-Date $UpdateFileDate -Format Y
$version = Get-Date $InstalledVersion -Format Y 

if ($version -lt $file) {

$Process = Start-Process -FilePath $FileUpdatePath -PassThru
Wait-process -InputObject $Process

}

2 个答案:

答案 0 :(得分:0)

由于您不想在要比较的日期中包括日期部分,因此建议您执行以下操作。
它将日期始终转换为该月的第一天。使用[datetime]进行强制转换可确保您确实在比较日期对象,而不是字符串。

# of use something like this:
# $fileDate = [datetime]('{0:MM/01/yyyy}' -f (Get-Item -Path $FileUpdatePath).LastWriteTime)

$fileDate    = [datetime](Get-Date ((Get-Item -Path $FileUpdatePath).LastWriteTime) -Format 'MM/01/yyyy')
$installDate = [datetime](Get-Date ((Get-Item -Path $FilePath).LastWriteTime) -Format 'MM/01/yyyy')

if ($installDate -lt $fileDate) {
    $Process = Start-Process -FilePath $FileUpdatePath -PassThru
    Wait-process -InputObject $Process
}

答案 1 :(得分:0)

谢谢Lee_Dailey和Theo的帮助。我使用了混合解决方案,使用了两个答案的一部分。我将字符串更改为双精度。这使其成为简单的数学比较。容易得多。

[datetime]$UpdateFileDate = (Get-ItemProperty -Path  $FileUpdatePath).LastWriteTime
[datetime]$InstalledVersion = (Get-ItemProperty -path $FilePath).LastWriteTime
[double]$file = Get-Date $UpdateFileDate.ToString('yyyy.MM')
[double]$version = Get-Date $InstalledVersion.ToString('yyyy.MM')

if ($version -lt $file) {

$Process = Start-Process -FilePath $FileUpdatePath -PassThru
Wait-process -InputObject $Process

}