PowerShell удалить резервную копию файла / архива бит / Windows 2008 R2 - PullRequest
1 голос
/ 06 февраля 2012

Я собрал скрипт для удаления резервных копий файлов, но, похоже, у меня перепутан атрибут архивного бита.

$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
}

Итак ... Мне было интересно, является ли это чем-то новым для windows 2008 r2, где архивный бит "A" устанавливается автоматически при создании, или, возможно, другие найденные мной скрипты неверны.

1 Ответ

1 голос
/ 06 февраля 2012

Я думаю, вы делаете это более сложным, чем нужно. Вот пример, где я возвращаю только файлы TXT с установленным атрибутом ARCHIVE:

PS C:> dir c: \ work * .txt | where {$ _. attribute -match "Архив"} | выберите имя , Атрибуты

При необходимости вы можете добавить дополнительную фильтрацию, если хотите, чтобы файлы были новее или старше определенной даты.

...