題 基於創建日期查找和突出顯示特定文件的Powershell腳本


我正在嘗試編寫一個Powershell腳本來檢查某個文件夾中的.zip文件。 .zip文件包含來自某些備份的信息。這些.zip文件位於我們公司擁有的不同工廠的文件夾樹中。每天都應該在這個文件夾樹的底部有一個新的.zip文件,該文件總共保留了7天。

理想情況下,每個文件夾應包含連續7天的備份,相當於每個文件夾中的7個.zip文件。有時超過7,有時有0,這取決於工廠正在經歷的問題。

我想(並且遇到麻煩)編寫一個腳本來檢查這些文件夾中的這些.zip文件,如果過去七天內沒有任何文件,請告訴我。 (如果沒有確切的話,那也沒關係)。

到目前為止,我有以下代碼:

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

但是這段代碼會顯示我必須手動查看的每個文件的列表。

我希望腳本或多或少地突出顯示一個不包含至少7天的.zip文件的目錄。

任何幫助或指導表示讚賞。


2
2017-07-05 19:42


起源




答案:


您的代碼段將返回過去七天內創建的所有文件。

$_.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之間。


1
2017-07-05 20:17



感謝您的投入。如果有超過7天的文件,我真的不在乎。我更擔心在過去7天內創建了任何.zip文件。我不確定如何實現最後一行代碼。 - cyborgcommando0
@ cyborgcommando0嗯。你的代碼應該有效。你可以顯示一個目錄列表和腳本輸出不適用的東西? - splattered bits
我可能做錯了。我對Powershell並不滿意。我到目前為止的代碼是:Get-ChildItem -filter“* .zip”-recurse -path C:\ ArcherBackup \ |其中{($ _。CreationTime 0 -lt x -and x -lt 10((get-date).AddDays(-7)))}這給了我幾個錯誤。 - cyborgcommando0
@ cyborgcommando0 0 -lt x -and x -lt 10 只是一個示例,並不屬於您的代碼。同樣,如果我能看到包含符合您條件的文件的示例目錄列表,那將會很有幫助。請使用該信息編輯您的問題。 - splattered bits


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文件的子目錄;

除了hiden文件和目錄:

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 -hide標頭,

?  - 別名 where  - 別名 Where-Object

%  - 別名 foreach  - 別名 ForEach-Object

-fo  - 別名 -forcefi  - 別名 -filter-r  - 別名 -recurse

^  - 逃避性格 |  - 當前shell不作為a處理 pipeline-命令

group  - 別名 Group-Object


1
2017-07-05 23:48