1

Get-Childitemのフィルターの日付範囲の基準を満たさないフォルダー内のファイルを見つけるための powershell コマンドは何ですかLastWriteTime

LastWriteTimeそのため、ディレクトリに 2012 年 10 月 1 日 (10 月 1 日) から 2012 年 10 月 25 日 (10 月 25 日) までのファイルを含まないファイルがあるかどうかを確認してください。

その範囲内にファイルがないフォルダーを表示したい...そのようにして、それらが古く、ディレクトリ全体を削除できることがわかります。

これの例は次のとおりです。

Folder1 - 10 月に書き込まれたいくつかのファイル - このフォルダー全体を無視し、これらを結果に表示しません

Folder2 - LastWriteTime10 月にはファイルが書き込まれていないため、このフォルダーとファイルが表示されます。

私はこれができることを知ってGet-ChildItemおり、以下のビットで立ち往生しています..

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

2 に答える 2

3

頭の上の簡単な解決策は次のとおりです。

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

どこ$startDateとです. 01/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) }

-ge $dayEnd.AddDays(1)と比較すると、問題がどのように修正25-Oct-2012されるかに注目して25-Oct-2012 9:00ください。

于 2012-10-25T14:03:06.147 に答える
2

これを試して:

[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 }
于 2012-10-25T14:15:45.770 に答える