PowerShellのバックアップファイル/アーカイブビット/ Windows 2008 R2の削除

バックアップされたファイルを削除するためのスクリプトをまとめましたが、アーカイブビット属性が混乱していると思います。

$path = "D:\logs\"
$files = Get-ChildItem -Path $path -Recurse
$attribute = [io.fileattributes]::archive   #archive bit
$date = get-date -format d     # strip time out of date, date needed for Filename
$date = $date.replace('/','.') # strip out forward slashes and replac with . in date
$filename = "\ArchiveLog"+$date+".txt" # Filename for log file.
$location = $path+$filename 
cd D:\logs 

Foreach($file in $files)
{
 If((Get-ItemProperty -Path $file.fullname).attributes -band $attribute)
  { 
    add-content -path "$path" "$file.DirectoryName has been deleted"
    Remove-Item $file -force
  }
}

しかし、私がこれをテストすると、新しく作成されたファイルは "A"属性またはアーカイブビットを持つので、このスクリプトは作成されたばかりの新しいファイルを削除します。

私が他のサンプルスクリプトを見たとき、彼らは通常、ファイルのアーカイブビットが設定されていることを確認する行を持っています:

attribute = [io.fileattributes]::archive   #archive bit
If((Get-ItemProperty -Path $file.fullname).attributes -band $attribute)
{ 
log file name    
Remove file
}

アーカイブビット "A"が作成時に自動的に設定されているWindows 2008 r2の新機能か、おそらく私が見つけた他のスクリプトが間違っているのかどうか疑問に思っていました。

1

1 答え

私はあなたが必要とする以上に複雑にしていると思います。次に、ARCHIVE属性を設定したTXTファイルのみを返す例を示します。

PS C:> dir c:\work*.txt | where {$_.attributes -match "Archive"} | select name ,attributes

特定の日付よりも新しいファイルまたは古いファイルだけを必要とする場合は、必要に応じてフィルタリングを追加できます。

1
追加された
@ user1178826アーカイブ属性の状態は、ファイルがバックアップされているかどうかを示します。ファイルが作成または変更されると、アーカイブビットが設定され、ファイルがバックアップされるとアーカイブビットがクリアされます。
追加された 著者 CB.,
ジェフリー、はい、ありがとう、それはずっときれいです。しかし、「アーカイブ」属性が設定されている場合は、そのファイルがバックアップされているか、またはバックアップが必要であることを意味します。それでも検索すると、私はこの情報をすばやく見つけることができると思っていましたが、私はMicrosoftのWebサイトでこれを見つけるのが難しいです。
追加された 著者 colo_joe,
これをクリアしていただきありがとうございます、私はちょうどいくつかのファイルをテストし、これを確認することができました(ごめんなさい。
追加された 著者 colo_joe,