Как проверить, является ли файл старше определенного времени с помощью PowerShell?

Как я могу проверить Powershell, чтобы увидеть, находится ли файл в $fullPath старше, чем "5 дней 10 часов 5 минут"?

( OLD, я имею в виду, если он был создан или изменен не позднее 5 дней 10 часов 5 минут)

Ответы

Ответ 1

Вот довольно краткий, но очень читаемый способ сделать это:

$lastWrite = (get-item $fullPath).LastWriteTime
$timespan = new-timespan -days 5 -hours 10 -minutes 5

if (((get-date) - $lastWrite) -gt $timespan) {
    # older
} else {
    # newer
}

Причина этого в том, что вычитание двух дат дает вам время. Timespans сопоставимы со стандартными операторами.

Надеюсь, это поможет.

Ответ 2

В этой статье powershell script будут отображаться файлы старше 5 дней, 10 часов и 5 минут. Вы можете сохранить его как файл с расширением .ps1, а затем запустить его:

# You may want to adjust these
$fullPath = "c:\path\to\your\files"
$numdays = 5
$numhours = 10
$nummins = 5

function ShowOldFiles($path, $days, $hours, $mins)
{
    $files = @(get-childitem $path -include *.* -recurse | where {($_.LastWriteTime -lt (Get-Date).AddDays(-$days).AddHours(-$hours).AddMinutes(-$mins)) -and ($_.psIsContainer -eq $false)})
    if ($files -ne $NULL)
    {
        for ($idx = 0; $idx -lt $files.Length; $idx++)
        {
            $file = $files[$idx]
            write-host ("Old: " + $file.Name) -Fore Red
        }
    }
}

ShowOldFiles $fullPath $numdays $numhours $nummins

Ниже приводится более подробная информация о линии, которая фильтрует файлы. Он разделен на несколько строк (может быть, не является юридической силой), чтобы я мог включать комментарии:

$files = @(
    # gets all children at the path, recursing into sub-folders
    get-childitem $path -include *.* -recurse |

    where {

    # compares the mod date on the file with the current date,
    # subtracting your criteria (5 days, 10 hours, 5 min) 
    ($_.LastWriteTime -lt (Get-Date).AddDays(-$days).AddHours(-$hours).AddMinutes(-$mins))

    # only files (not folders)
    -and ($_.psIsContainer -eq $false)

    }
)

Ответ 3

Test-Path может сделать это для вас:

Test-Path $fullPath -OlderThan (Get-Date).AddDays(-5).AddHours(-10).AddMinutes(-5)