Jak usunąć atrybut ReadOnly w pliku za pomocą PowerShell?


Odpowiedzi:


146

Możesz użyć Set-ItemProperty:

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

lub krócej:

sp file.txt IsReadOnly $false

3
Set-Property to jedyny wbudowany sposób, w jaki można to zrobić w czysty sposób w potoku i używając symboli wieloznacznych: {sp * .txt IsReadOnly $ false} OR {ls. -recurse -include * .cs | sp -name IsReadOnly -value $ false}
Jaykul

Korzystając z programu PowerShell v2, widzę trudne w użyciu powiązania CmdLet dla sp. PSCX Set-Writable i Set-ReadOnly nie mają tych problemów. Zaprezentuję problemy, które widzę na blogu, a później podam do nich link. Polecam odpowiedź Keitha na PowerShell v2 (nowoczesny PowerShell).
yzorg

3
@yzorg: Więc co dokładnie mi tu mówisz? Jeśli chodzi o odpowiedź Keitha, używa PSCX. Nie każdy ma te zainstalowane i tak naprawdę nie jest to przypadek PowerShell v1 vs. v2.
Joey

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    
}  

Powyższy fragment kodu pochodzi z tego artykułu

AKTUALIZACJA Używając implementacji Keitha Hilla z komentarzy (przetestowałem to i działa), wygląda to następująco:

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

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

6
Implementacja jest prostsza: $ file.IsReadOnly = $ false
Keith Hill

15

Mimo że nie jest to Native PowerShell, nadal można do tego użyć prostego polecenia Attrib :

attrib -R file.txt

Dzięki! U mnie to zadziałało: reż. -r * .cs | % {$ _. fullname} | % {attribute -r $ _}
Cameron Taggart

1
Mógł pominąć krok: reż. -r * .cs | % {attribute -r $ _. FullName}
Nathan Hartley

9

lub możesz po prostu użyć:

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

Powyższe będzie działać dla wszystkich plików .cs w drzewie podrzędnym bieżącego folderu. Jeśli potrzebujesz innych typów, po prostu dostosuj plik „* .cs” do swoich potrzeb.


3
Dostosuj polecenie (dodaj -File), aby działało tylko z plikami. Katalogi nie mają tej właściwości.
Bobby Cannon

7

Jeśli używasz rozszerzeń społeczności programu PowerShell :

PS> Set-Writable test.txt
PS> dir . -r *.cs | Set-Writable
# Using alias swr
PS> dir . -r *.cs | swr

Możesz zrobić odwrotnie:

PS> dir . -r *.cs | Set-ReadOnly
# Using alias sro
PS> dir . -r *.cs | sro

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)

dziękuję każdemu, kto pomaga rozwiązać jakiś problem ... i pomaga w tym kodzie

ten kod działa dla mnie ... aby udostępnić folder każdemu z uprawnieniami do odczytu i zapisu, możesz użyć tego w .net

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.