为什么不使用-NewerThan测试路径在这里工作

时间:2019-09-10 15:50:49

标签: powershell

我要查找的文件显然存在

PS> Get-Item $Template|?{$_.LastWriteTime -gt $cutofftime}

Mode                LastWriteTime         Length Name                
----                -------------         ------ ----
-a----        9/10/2019   8:45 AM        1543608 Found.txt

但是,当我试图确定这样的存在时,我得到了错误。

PS> Test-Path $Template -NewerThan $cutofftime
False

这显然是由于时间而不是文件本身。

PS> Test-Path $Template
True

有人知道为什么吗?

万一重要:

$CutoffTime = (Get-Item OtherFile.txt).LastWriteTime

PS> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.16299.1146
PSEdition                      Desktop     
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.16299.1146
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0         
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

2 个答案:

答案 0 :(得分:2)

如果不是错字,那我就无法解释。如果$ template是正确的,它对我有用。

编辑:好的,如果$ template设置为'f * .txt',我确认该错误。可能必须运行两次。我认为通配符模式可能与其他文件匹配?你可以睡一觉。

echo hi > otherfile.txt
sleep 60
echo hi > found.txt # newer

$template = 'f*.txt'
$CutoffTime = (Get-Item OtherFile.txt).LastWriteTime
$CutoffTime

Get-Item $Template|?{$_.LastWriteTime -gt $cutofftime} | ft

Test-Path $Template -NewerThan $cutofftime  # incorrectly false

Test-Path $Template

输出:


Friday, September 13, 2019 10:30:13 AM



    Directory: C:\users\admin\foo

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         9/13/2019 10:31 AM              4 found.txt

False
True

答案 1 :(得分:0)

至少在我看来,LastWriteTime和-NewerThan值在进行比较之前似乎都经过了一些舍入。我还没有进行足够的调查来确切地知道多少,但是当两个值之间的时间很短(2分钟或更短)时,我看到的效果更有可能发生。相差只有几秒钟,它总是会发生。至少在我的机器上。