У меня есть Powershell script, который копирует файлы из одного места в другое. После завершения копирования я хочу очистить атрибут Archive в файлах в скопированном исходном местоположении.
Как очистить атрибут Архива файла с помощью Powershell?
У меня есть Powershell script, который копирует файлы из одного места в другое. После завершения копирования я хочу очистить атрибут Archive в файлах в скопированном исходном местоположении.
Как очистить атрибут Архива файла с помощью Powershell?
От здесь:
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;}
}
Вы можете использовать добрую старую команду dos attrib следующим образом:
attrib -a *.*
Или для этого, используя Powershell, вы можете сделать что-то вроде этого:
$a = get-item myfile.txt
$a.attributes = 'Normal'
Поскольку атрибуты - это в основном поле битмаски, вы должны быть уверены, что очистите поле архива, оставив только остальное:
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:\>
$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 }
Mitch отвечает хорошо для большинства атрибутов, но не будет работать для "Сжатый". Если вы хотите установить сжатый атрибут в папке с помощью PowerShell, вы должны использовать инструмент командной строки compact
compact /C /S c:\MyDirectory
Вы можете использовать следующую команду для переключения поведения
$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