Як видалити атрибут ReadOnly з файлу за допомогою PowerShell?


Відповіді:


146

Ви можете використовувати Set-ItemProperty:

Set-ItemProperty file.txt -name IsReadOnly -value $false

або коротше:

sp file.txt IsReadOnly $false

3
Set-Properties - це єдиний вбудований спосіб, коли ви можете чисто робити це на конвеєрі та використовуючи символи: {sp * .txt IsReadOnly $ false} АБО {ls. -поточний -включити * .cs | sp-ім’я IsReadOnly -значити $ false}
Jaykul

Використовуючи PowerShell v2, я бачу важкі у використанні прив'язки CmdLet для sp. Набір PSCX для запису та Set-ReadOnly не має цих проблем. Я буду вести блог про проблеми, які я бачу, і зв’яжуся з цим пізніше. Я рекомендую відповідь Кіта для PowerShell v2 (сучасна PowerShell).
yzorg

3
@yzorg: То що саме ти мені тут кажеш? Що стосується відповіді Кіта, він використовує PSCX. Не у всіх встановлені встановлені, і це насправді не випадок PowerShell v1 проти v2.
Джої

16
$file = Get-Item "C:\Temp\Test.txt"

if ($file.attributes -band [system.IO.FileAttributes]::ReadOnly)  
{  
  $file.attributes = $file.attributes -bxor [system.IO.FileAttributes]::ReadOnly    
}  

Вищенаведений фрагмент коду взято з цієї статті

ОНОВЛЕННЯ Використовуючи реалізацію Кіта Хіла з коментарів (я тестував це, і це працює), це стає:

$file = Get-Item "C:\Temp\Test.txt"

if ($file.IsReadOnly -eq $true)  
{  
  $file.IsReadOnly = $false   
}  

6
Реалізація простіша, ніж: $ file.IsReadOnly = $ false
Кіт Хілл

15

Хоча це не Native PowerShell, все одно можна використовувати для цього просту команду Attrib :

attrib -R file.txt

Дякую! Це працювало для мене: реж. -r * .cs | % {$ _. повне ім'я} | % {attrib -r $ _}
Cameron Taggart

1
Можна було пропустити крок: реж. -r * .cs | % {attrib -r $ _. FullName}
Натан Хартлі

9

або ви можете просто використовувати:

get-childitem *.cs -Recurse -File | % { $_.IsReadOnly=$false }

Вище буде працювати для всіх .cs-файлів у під-дереві поточної папки. Якщо вам потрібні інші типи, просто відрегулюйте "* .cs" під свої потреби.


3
Відрегулюйте команду (add -File) для роботи лише з файлами. Каталоги не мають властивості.
Боббі Кеннон


2
Shell("net share sharefolder=c:\sharefolder/GRANT:Everyone,FULL")
Shell("net share sharefolder= c:\sharefolder/G:Everyone:F /SPEC B")
Shell("Icacls C:\sharefolder/grant Everyone:F /inheritance:e /T")
Shell("attrib -r +s C:\\sharefolder\*.* /s /d", AppWinStyle.Hide)

дякую всім, хто допомагає вирішити якусь проблему ... і допомагає цей код

цей код працює для мене .. щоб поділитися папкою для кожного з дозволом для читання та запису, ви можете використовувати це в .net

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.