PowerShell测试路径修改时间

时间:2015-05-28 07:19:02

标签: powershell

我正在编写一个脚本来测试某个文件当前是否在目录中,如果是,它将用于脚本中的下一个操作。但是,此脚本将作为计划任务运行,并且我不希望此步骤多次发生。在我的脑海中,最好的方法是让Test-path Command工作如下:

Test-Path C:\Path\File.zip | where {$_.LastWriteTime -lt (Get-Date).AddMinutes(-30)}

这并不像我想象的那样有效。有没有办法检查文件是否存在并在If语句中具有该文件?类似的东西:

if(test-path C:\Path\File.zip | where {$_.LastWriteTime -lt (Get-Date).AddMinutes(-30)}) {execute scriptblock}

或者,如果Get-Childitem有办法在if语句中返回bool我可以使用它吗?非常感谢。

1 个答案:

答案 0 :(得分:5)

问题是Test-Path cmdlet返回boolean$True$False),而不是FileInfo对象。因此,返回值没有LastWriteTime属性,这就是您的代码不起作用的原因。

正如您所想的那样,您可以使用以下事实:PowerShell中的if语句将空列表和$NULL对象评估为false,而包含项目的列表或正确的对象引用(非null)评估为真。因此,您可以将其更改为:

if (Get-ChildItem C:\Path\File.zip | Where { $PSItem.LastWriteTime -gt (Get-Date).AddMinutes(-30))
{
    # File newer than half an hour exists
}
else 
{
    # No file newer than half an hour exists
}