Powershell 脚本根据创建日期查找并突出显示特定文件

Powershell 脚本根据创建日期查找并突出显示特定文件

我正在尝试编写一个 Powershell 脚本来检查某个文件夹中的 .zip 文件。.zip 文件包含来自某些备份的信息。这些 .zip 文件位于我们公司拥有的不同工厂的文件夹树中。每天,此文件夹树的底部都应该有一个新的 .zip 文件,该文件总共保留 7 天。

理想情况下,每个文件夹应连续7天的备份等于7个文件夹中的7个文件,有时有7个以上的备份。

我想(但遇到了麻烦)编写一个脚本来检查这些文件夹中的 .zip 文件,并让我知道其中是否没有过去 7 天的任何文件。(如果没有正好 7 天也没关系)。

到目前为止我有以下代码:

Get-ChildItem -filter "*.zip" -recurse -path C:\ArcherBackup\ | where {($_.CreationTime -gt ((get-date).AddDays(-7)))}

但是这段代码会列出我必须手动查看的每个文件的列表。

我希望脚本或多或少地突出显示不包含至少 7 天前的 .zip 文件的目录。

任何帮助或指导都将不胜感激。

答案1

您的代码片段将返回过去七天内创建的所有文件。

$_.CreationTime -gt ((get-date).AddDays(-7))

我认为您想要返回超过七天的文件,因此更改-gt-lt

$_.CreationTime -lt ((get-date).AddDays(-7))

使用比较时,最好总是使用小于运算符,这样,条件增加从左到右,像 x 轴一样,它有助于可读性/理解。

0 -lt x -and x -lt 10

显然 x 应该介于 0 和 10 之间。

答案2

var 1,命令行,不包含至少 7 天前的 .zip 文件的子目录:

powershell $tm=(get-date).AddDays(-7);ls "C:\ArcherBackup" -fo -r^|?{$_.PSIsContainer}^|%{ls "$($_.FullName)" -fo -fi *.zip}^|?{$_.CreationTime -lt $tm}^|group Directory^|FT -H Name

var 2、命令行、不包含至少 7 天前的 .zip 文件的子目录;

除了隐藏文件和目录:

powershell $tm=(get-date).AddDays(-7);ls "C:\ArcherBackup" -r^|?{$_.PSIsContainer}^|%{ls "$($_.FullName)" -fi *.zip}^|?{$_.CreationTime -lt $tm}^|group Directory^|FT -H Name

没有文件的空子文件夹:

powershell $d=ls -r^|?{$_.PSIsContainer};$d^|?{$_.GetFiles().Count -eq 0}^|FT -H FullName

没有 zip 文件的子文件夹:

powershell $d=ls -r^|?{$_.PSIsContainer};$d^|?{$_.GetFiles('*.zip').Count -eq 0}^|FT -H FullName

没有 zip 文件的子文件夹;

不包含至少 7 天前的 .zip 文件的子目录:

powershell $d=ls "C:\ArcherBackup" -fo -r^|?{$_.PSIsContainer};$tm=(get-date).AddDays(-7);$d^|%{ls "$($_.FullName)" -fo -fi *.zip}^|?{$_.CreationTime -lt $tm}^|group Directory^|FT -Au -H Name, Count;$d^|?{$_.GetFiles('*.zip').Count -eq 0}^|FT -H FullName|findstr [/s]| more

|findstr [/s]|- 删除管道中的空字符串

FT- 别名Format Table

FT -H FullName- 输出格式,仅选择FullName

-Au别名-Autosize

-H-隐藏标题,

?- 别名where- 别名Where-Object

%- 别名foreach- 别名ForEach-Object

-fo- 别名-forcefi- 别名-filter-r- 别名-recurse

^- 转义字符|- 当前 shell 不作为pipeline命令处理

group- 别名Group-Object

相关内容