如何使用Powershell比较和过滤最近20分钟内修改的文件?

问题描述

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

def foo(arr):
    new_arr = np.empty(arr.size,dtype=np.uint64)
    for i in range(arr.size):
        x,y = arr[i]
        e,n = ''
        if x < 0:
            e = '1'
        else:
            w = '2'
        if y > 0:
            n = '3'
        else:
            s = '4'
        new_arr[i] = int(f'{abs(x)}{e}{abs(y){n}'.replace('.',''))

输出如下:

$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")
    }
}

问题: 所以你看,我也已经在早上写了文件。我也想比较上午和下午。有人可以帮我吗?

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

请帮助。

此致

Mitesh Agrawal

解决方法

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

[datetime]类型已经支持三向比较,因此完全不需要比较现有[datetime]值的字符串表示-除非您使用严格的字节序日期格式(如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")
    }
}
,

使用!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")
    }
}
除非且除非需要比较子目录文件,否则不需要

递归

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...