如何使用Powershell更改文件的属性?

时间:2009-01-21 10:40:32

标签: powershell

我有一个Powershell脚本,可以将文件从一个位置复制到另一个位置。复制完成后,我想清除源位置中已复制文件的存档属性。

如何使用Powershell清除文件的Archive属性?

7 个答案:

答案 0 :(得分:26)

您可以使用这样的旧的dos attrib命令:

attrib -a *.*

或者使用Powershell做到这一点你可以这样做:

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

答案 1 :(得分:11)

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

答案 2 :(得分:10)

由于属性基本上是一个位掩码字段,因此您需要确保清除存档字段,同时保留其余字段:

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

Mitch的答案适用于大多数属性,但will not work适用于“压缩”。如果要使用PowerShell在文件夹上设置压缩属性,则必须使用命令行工具compact

compact /C /S c:\MyDirectory

答案 5 :(得分:1)

您可以使用以下命令切换行为

$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

答案 6 :(得分:0)

我发现 Simon Steele 的回答很有帮助,但我需要修改的不仅仅是一个文件,所以我将其更改为以下内容:


$BadAttributes = Get-ChildItem "C:\PATH" -Recurse -Force

foreach($File in $BadAttributes) {

if (Test-Path -Path $File -IsValid)
{

$File.attributes = 'Normal'

}

}

# Check file attributes
Get-ItemProperty -Path "C:\PATH" | Format-list -Property Attributes -Force