Как изменить атрибут файла с помощью Powershell? - PullRequest
22 голосов
/ 21 января 2009

У меня есть скрипт Powershell, который копирует файлы из одного места в другое. После завершения копирования я хочу очистить атрибут Archive для файлов в исходном местоположении, которые были скопированы.

Как очистить атрибут Archive файла с помощью Powershell?

Ответы [ 6 ]

26 голосов
/ 21 января 2009

Вы можете использовать старую добрую команду dos attrib:

attrib -a *.*

Или сделать это с помощью Powershell, вы можете сделать что-то вроде этого:

$a = get-item myfile.txt
$a.attributes = 'Normal'
11 голосов
/ 21 января 2009

С здесь :

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;}
} 
10 голосов
/ 21 января 2009

Поскольку атрибуты в основном являются битовой маской, вам необходимо обязательно очистить поле архива, оставив остальные:

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:\>
2 голосов
/ 21 июня 2017

Ответ Митча хорошо работает для большинства атрибутов, но не будет работать для «Сжатый». Если вы хотите установить сжатый атрибут для папки с помощью PowerShell, вы должны использовать инструмент командной строки compact

compact /C /S c:\MyDirectory
2 голосов
/ 31 мая 2012
$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 голос
/ 25 ноября 2009

Вы можете использовать следующую команду для переключения поведения

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...