Tutorial :How do I change a file's attribute using Powershell?


I have a Powershell script that copies files from one location to another. Once the copy is complete I want to clear the Archive attribute on the files in the source location that have been copied.

How do I clear the Archive attribute of a file using Powershell?


From here:

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


You can use the good old dos attrib command like this:

attrib -a *.*  

Or to do it using Powershell you can do something like this:

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


As the Attributes is basically a bitmask field, you need to be sure clear the archive field while leaving the rest alone:

  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:\>  


Mitch's answer works well for most attributes, but will not work for "Compressed." If you want to set the compressed attribute on a folder using PowerShell you have to use the command-line tool compact

compact /C /S c:\MyDirectory  


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


You may use the following command to toggle the behaviour

$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  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »