2012-10-25 41 views
1

什麼是powershell命令,用於查找文件夾中不符合Get-Childitem過濾器LastWriteTime的日期範圍條件的文件中的文件。獲取未在特定日期範圍內寫入的文件/文件夾

因此,請檢查一個目錄是否包含在2012年10月1日(10月1日)至2012年10月25日(10月25日)之間不包含任何含有LastWriteTime的文件的文件。

我想顯示沒有任何文件在該範圍內的文件夾......這種方式我知道他們是舊的,整個目錄可以刪除。這

例子是:

Folder1中日 - 10月內寫了一些文件 - 忽略這整個文件夾,並沒有在成績

文件夾2顯示這些 - 無文件LastWriteTime寫在十月份和所以應該顯示這個文件夾和文件。

我知道這可以用Get-ChildItem做,我被困在下面的位..頭部

Get-ChildItem E:\LogArchive -Recurse | Where-Object{$_.LastWriteTime.......? 

回答

3

簡單的解決方案爐頂是這樣的:

Where-Object{ $_.LastWriteTime -lt $startDate -or $_.LastWriteTime -gt $endDate } 

其中$startDate01/10/2012 (1st Oct)$endDate25/10/2012 (25th Oct)

這種方法的問題在於它沒有考慮到[datetime]中的時間因素。因此,在您的示例中,如果您有25-Oct-2012作爲上限,它將返回在25-Oct-2012 9:00創建的文件,您可能不想要這些文件。

下面的代碼計算[datetime]的隨時間部分截斷,基於輸入[datetime],並建立的($dayStart, $dayEnd)月最新日期範圍:

$entry_date = "20-Oct-2012 9:00" #to feed current date, use this: Get-Date 
$dayEnd = Get-Date $entry_date -Minute 0 -Hour 0 -Second -0; 
$dayStart = Get-Date $endDate -Day 1; 
$dayStart, $dayEnd 

對於此示例代碼,這裏是輸出:

Monday, October 01, 2012 12:00:00 AM 
Saturday, October 20, 2012 12:00:00 AM 

注意這種方法是靈活的,因爲你可以設置$entry_date要麼DateString,它可能會或可能不會有時間的一部分 - 它會在所有的工作這些情況。然後,您可以在Where-Object這個代碼:

Where-Object{ $_.LastWriteTime -lt $dayStart -or $_.LastWriteTime -ge $dayEnd.AddDays(1) } 

注意如何比較25-Oct-201225-Oct-2012 9:00-ge $dayEnd.AddDays(1)修復該問題。

+0

,似乎工作,但我得到了下面的錯誤:錯誤的參數來操作「-gt」:無法比較「2012年2月9日20時00分02秒」到「2012年10月23日」。錯誤:「無法轉換值」 23/10/2012「鍵入」System.DateTime「錯誤:」字符串未被識別爲有效的DateTime。「」。 在線:1 char:112 + Get-ChildItem E:\ LogArchive -Recurse | Where-Object {$ _。LastWriteTime -lt「01/10/2012」 - 或$ _。LastWriteTime -gt <<<< 「23/10/2012」}} + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:BadOperatorArgument – lara400

+2

@ lara400:如果您將'Date'指定爲'String',請確保將其轉換爲[日期時間],並小心將其與您的文化所期望的格式相同。或者你可以使用這種格式'[datetime]「2012年10月25日」 - 應該可以在所有情況下工作。或者使用[datetime] :: ParseExact。 – Neolisk

+0

非常感謝這 - 真的很有幫助而且很棒! – lara400

1

試試這個:

[datetime]$startDate = "10/01/2012" # or $startDate = get-date -Date 1/10/2012 
[datetime]$endDate = "10/25/2012" # or $endDate = get-date -Date 25/10/2012 

? { $_.LastWriteTime -lt $startDate -or $_.LastWriteTime -gt $endDate } 
+0

你的答案與我的主要區別是什麼? – Neolisk

+0

@Neolisk它將轉換顯示爲比較所需的對象[日期時間]。 –

+0

這是不是在原來的問題,所以沒有顯着差異,恕我直言。 – Neolisk

相關問題