Wie entferne ich das ReadOnly-Attribut in einer Datei mit PowerShell?


Antworten:


146

Sie können verwenden Set-ItemProperty:

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

oder kürzer:

sp file.txt IsReadOnly $false

3
Set-Property ist die einzige integrierte Methode, mit der Sie dies sauber in der Pipeline und unter Verwendung von Platzhaltern tun können: {sp * .txt IsReadOnly $ false} OR {ls. -recurse -include * .cs | sp-name IsReadOnly -value $ false}
Jaykul

Bei Verwendung von PowerShell v2 werden schwer zu verwendende CmdLet-Bindungen für sp. PSCX Set-Writable und Set-ReadOnly haben diese Probleme nicht. Ich werde die Probleme, die ich sehe, bloggen und später darauf verlinken. Ich empfehle die Antwort von Keith für PowerShell v2 (moderne PowerShell).
Yzorg

3
@yzorg: Also, was genau erzählst du mir hier? Keith antwortet mit PSCX. Nicht jeder hat diese installiert und das ist nicht wirklich ein Fall von 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    
}  

Das obige Code-Snippet stammt aus diesem Artikel

UPDATE Unter Verwendung der Implementierung von Keith Hill aus den Kommentaren (ich habe dies getestet und es funktioniert) wird Folgendes:

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

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

6
Die Implementierung ist einfacher als das: $ file.IsReadOnly = $ false
Keith Hill

15

Auch wenn es sich nicht um native PowerShell handelt, können Sie dennoch den einfachen Attribut- Befehl verwenden:

attrib -R file.txt

Vielen Dank! Das hat bei mir funktioniert: dir. -r * .cs | % {$ _. fullname} | % {attrib -r $ _}
Cameron Taggart

1
Hätte einen Schritt überspringen können: dir. -r * .cs | % {attrib -r $ _. FullName}
Nathan Hartley

9

oder Sie können einfach verwenden:

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

Oben funktioniert für alle CS-Dateien im Unterbaum des aktuellen Ordners. Wenn Sie andere Typen benötigen, passen Sie einfach "* .cs" an Ihre Bedürfnisse an.


3
Passen Sie den Befehl (add -File) so an, dass nur mit Dateien gearbeitet wird. Verzeichnisse haben die Eigenschaft nicht.
Bobby Cannon


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)

Vielen Dank für alle, die helfen, ein Problem zu lösen ... und diesem Code helfen

Dieser Code funktioniert für mich. Um einen Ordner für jeden mit Lese- und Schreibberechtigung freizugeben, können Sie diesen in .net verwenden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.