首页 > 解决方案 > 按创建日期排序文件

问题描述

有一个每天运行的报告(我们只能选择每天或每月),我们只需要一周中的一天上传。我需要移动星期一创建的文件并删除目录中的所有其他文件。

我能够在一个变量中获取创建时间,然后使用另一个变量来提取星期几。这仅适用于一个文件,因此我需要将foreach语句添加到此过程中。

$FileDate = (Get-ChildItem "c:\temp\version.ps1").CreationTime
Write-Output $filedate

$day = (Get-Date $filedate).DayOfWeek

if ($day -eq "Monday") {
    Write-Output Correct file, copy to another directory
} else {
    Write-Host Delete file
}

该脚本仅适用于一个文件,而不适用于整个目录。我需要做的是查看每个文件的创建日期,如果它是从星期一开始,则将其移动并删除所有其他文件。

标签: powershell

解决方案


用于Where-Object过滤不是在特定日期创建的文件,然后移动它们并删除其余文件。

Get-ChildItem 'C:\temp' | Where-Object {
    $_.CreationTime.DayOfWeek -ne 'Monday'
} | Move-Item -Destination 'C:\somewhere\else\' -WhatIf
Remove-Item 'C:\temp\*.*' -WhatIf

在您验证只有您想要的文件将被移动并且只有您想要删除的文件将被删除后重新运行而不使用-WhatIf开关(移动的文件也将被报告为已删除,因为它们实际上还没有被移动)。


推荐阅读