PowerShell中如何正确比较文件的最后修改时间(含时分秒)
PowerShell文件完整修改时间比较解决方案
我需要比较两个文件的修改时间(包含时分秒),但当前代码的比较结果不符合预期——明明xlsx文件的修改时间(12:50:25)晚于csv文件(12:34:32),却返回False。
错误代码示例
Get-Item $OneDrivePathXlsx | Foreach {$_.LastWriteTime} $LastModifiedXlsx = $_.LastWriteTime Get-Item $OneDrivePathCsv | Foreach {$_.LastWriteTime} $LastModifiedCsv = $_.LastWriteTime $LastModifiedXlsx -gt $LastModifiedCsv
执行结果
den 7 april 2023 12:50:25 den 7 april 2023 12:34:32 False
问题原因
- 赋值逻辑错误:
Get-Item ... | Foreach {$_.LastWriteTime}仅输出了时间值,但管道执行结束后,$_不再指向目标文件对象,此时$_.LastWriteTime获取的并非目标文件的时间,而是无效或残留值。 - 单个文件无需使用
Foreach,直接访问Get-Item返回对象的LastWriteTime属性即可。
正确代码
# 直接获取单个文件的完整修改时间(包含时分秒) $LastModifiedXlsx = (Get-Item $OneDrivePathXlsx).LastWriteTime $LastModifiedCsv = (Get-Item $OneDrivePathCsv).LastWriteTime # 精准比较完整的DateTime对象 $LastModifiedXlsx -gt $LastModifiedCsv
执行这段代码后会正确返回True,因为PowerShell的DateTime类型本身包含完整的日期和时间信息,直接比较就能准确判断时间先后。
内容的提问来源于stack exchange,提问作者Fiilli
相关产品推荐
相关产品推荐

