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

后端 未结 6 1684
抹茶落季
抹茶落季 2021-02-05 05:07

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 t

相关标签:
6条回答
  • 2021-02-05 05:20

    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'
    
    0 讨论(0)
  • 2021-02-05 05:22

    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:\>
    
    0 讨论(0)
  • 2021-02-05 05:27
    $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 }
    
    0 讨论(0)
  • 2021-02-05 05:34

    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
    
    0 讨论(0)
  • 2021-02-05 05:38

    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;}
    } 
    
    0 讨论(0)
  • 2021-02-05 05:41

    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
    
    0 讨论(0)
提交回复
热议问题