2012-02-06 5 views
1

バックアップされたファイルを削除するスクリプトをまとめましたが、アーカイブビット属性が混乱していると思います。新しく作成されるファイルは、「」属性またはアーカイブビットを持っているようpowershellバックアップファイル/アーカイブビット/ウィンドウ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 
    } 
} 

しかし、私はこれをテストする場合、このスクリプトは、先ほど作成されているブランドの新しいファイルを削除します。

私は、彼らは通常、ファイルはビットをアーカイブ確実にラインが設定されている他のサンプルスクリプトを見てきました:

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

をだからこれは、Windows 2008 R2に何か新しいものであれば...私が思っていましたアーカイブビット "A"が作成時に自動的に設定されている場合、または私が見つけた他のスクリプトが間違っているとします。

答えて

1

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

PS C:> dir c:\ work * .txt | where {$ _。attributes -match "アーカイブ"} |名前を選択 、属性

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

+0

ジェフリー、はい、ありがとう、それはずっときれいです。しかし、「アーカイブ」属性が設定されている場合は、そのファイルがバックアップされているか、またはバックアップが必要であることを意味します。それでも検索すると、私はこの情報をすばやく見つけることができると思っていましたが、私はMicrosoftのWebサイトでこれを見つけるのが難しいです。 –

+0

@ user1178826アーカイブ属性の状態は、ファイルがバックアップされているかどうかを示します。ファイルが作成または変更されると、アーカイブビットが設定され、ファイルがバックアップされるとアーカイブビットがクリアされます。 –

+0

これをクリアしていただきありがとうございます、私はいくつかのファイルをテストし、これを確認することができました(ごめんなさい。 –