0

我只需要过滤在过去 20 分钟内修改过的文件。下面是我写的代码。

$Today = (Get-Date).AddMinutes(-20).ToString("MM/dd/yyyy hh:mm tt")
$filecreation = Get-ChildItem "D:\logs\" -Recurse
Foreach($file in $filecreation)
{
    if ($file.LastWriteTime.ToString("MM/dd/yyyy hh:mm tt") -gt $Today)
    {
        Write-Host $file.LastWriteTime.ToString("MM/dd/yyyy hh:mm tt")
    }
}

输出如下:

08/26/2020 07:39 PM
08/26/2020 07:54 PM
08/26/2020 10:58 AM
08/26/2020 07:54 PM
08/26/2020 12:01 AM
08/26/2020 12:01 AM
08/26/2020 12:01 AM

问题: 所以你看,我也有早上写的文件。我也想比较 AM 和 PM。有人可以帮我解决这个问题。

此外,我在“D:\logs”中有多个日期文件夹。输出中也捕获了相同的内容。我只想比较文件并复制。如何忽略 Get-ChildItem 中的文件夹?

请帮忙。

问候,

米特什·阿格拉瓦尔

4

2 回答 2

1

停止将[datetime]对象转换为字符串进行比较!

[datetime]类型已经支持三向比较,因此完全没有必要比较现有值的字符串表示形式[datetime]- 除非您使用严格的 endian 日期格式(如yyyyMMddHHmmss),否则它也不会按预期工作- 仅仅是因为排序规则字母顺序与根据时间的某些描述排序不同。

# $Today is now a [datetime] value, not a string
$Today = (Get-Date).AddMinutes(-20)
$filecreation = Get-ChildItem "D:\logs\" -Recurse
Foreach($file in $filecreation)
{
    # Now we just compare them directly as-is
    if ($file.LastWriteTime -gt $Today)
    {
        Write-Host $file.LastWriteTime.ToString("MM/dd/yyyy hh:mm tt")
    }
}
于 2020-08-26T16:44:47.230 回答
0

使用 !D 属性来搜索文件而不是目录 您可以使用以下代码。这消除了子目录(通过使用!Directory 或 !D)搜索并使用 24 小时格式来获取添加了 AM 和 PM 的最终文件。

$Today = (Get-Date).AddMinutes(-20).ToString("MM/dd/yyyy HH:mm tt")
$filecreation = Get-ChildItem -Attributes !Directory -Path "D:\logs\" 
Foreach($file in $filecreation)
{
    if ($file.LastWriteTime.ToString("MM/dd/yyyy HH:mm tt") -gt $Today)
    {
        Write-Host $file.LastWriteTime.ToString("MM/dd/yyyy HH:mm tt")
    }
}

除非需要比较子目录文件,否则不需要递归

于 2020-08-26T18:14:11.497 回答