2009-01-21 23 views
19

Dosyaları bir konumdan diğerine kopyalayan bir Powershell komut dosyasına sahibim. Kopyalama tamamlandığında, kopyalanan kaynak konumdaki dosyalarda Arşiv özniteliğini silmek istiyorum.Bir dosyanın özniteliğini Powershell kullanarak nasıl değiştiririm?

Bir dosyanın Arşiv özniteliğini Powershell kullanarak nasıl temizlerim?

+0

Bu aynı zamanda yardımcı olabilecek komut satırı aracını kullanmak zorunda: http://cmschill.net/stringtheory/2008/04/bitwise- operatörler/** Düzenleme **: Bağlantının şu anda geri döndüğüne ilişkin olası bir cevap 404: https://web.archive.org/web/20100105052819/http://cmschill.net/stringtheory/2008/ 04/bit şeklinde operatörleri /. –

cevap

11

here Gönderen:

function Get-FileAttribute{ 
    param($file,$attribute) 
    $val = [System.IO.FileAttributes]$attribute; 
    if((gci $file -force).Attributes -band $val -eq $val){$true;} else { $false; } 
} 


function Set-FileAttribute{ 
    param($file,$attribute) 
    $file =(gci $file -force); 
    $file.Attributes = $file.Attributes -bor ([System.IO.FileAttributes]$attribute).value__; 
    if($?){$true;} else {$false;} 
} 
26

Böyle iyi eski dos attrib komutunu kullanabilirsiniz:

attrib -a *.* 

Ya da böyle bir şey yapabilir PowerShell kullanarak yapmak için:

$a = get-item myfile.txt 
$a.attributes = 'Normal' 
7

Öznitelikler temel olarak bir bit maskesi alanı olduğundan, arşiv alanını temizlediğinizden emin olmanız gerekir Tek başına kalan bırakarak:

 
PS C:\> $f = get-item C:\Archives.pst 
PS C:\> $f.Attributes 
Archive, NotContentIndexed 
PS C:\> $f.Attributes = $f.Attributes -band (-bnot [System.IO.FileAttributes]::Archive) 
PS C:\> $f.Attributes 
NotContentIndexed 
PS H:\> 
0

Sen davranışı için

$file = (gci e:\temp\test.txt) 
$file.attributes 
Archive 

$file.attributes = $file.Attributes -bxor ([System.IO.FileAttributes]::Archive) 
$file.attributes 
Normal 

$file.attributes = $file.Attributes -bxor ([System.IO.FileAttributes]::Archive) 
$file.attributes 
Archive 
1
$attr = [System.IO.FileAttributes]$attrString 
$prop = Get-ItemProperty -Path $pathString 
# SetAttr 
$prop.Attributes = $prop.Attributes -bor $attr 
# ToggleAttr 
$prop.Attributes = $prop.Attributes -bxor $attr 
# HasAttr 
$hasAttr = ($prop.Attributes -band $attr) -eq $attr 
# ClearAttr 
if ($hasAttr) { $prop.Attributes -bxor $attr } 
1
Mitch'in cevabı çoğu özellik için iyi çalışır

ancak will not work geçiş yapmak için aşağıdaki komutu kullanabiliriz "Sıkıştırılmış". PowerShell kullanarak bir klasörde sıkıştırılmış özelliğini ayarlamak istiyorsanız compact

compact /C /S c:\MyDirectory 
İlgili konular