103 Stimmen

Wie entfernt man das ReadOnly-Attribut einer Datei mit PowerShell?

Wie kann ich das ReadOnly-Attribut einer Datei mithilfe eines PowerShell-Skripts (Version 1.0) entfernen?

148voto

Joey Punkte 329386

Sie können verwenden Set-ItemProperty :

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

oder kürzer:

sp file.txt IsReadOnly $false

3 Stimmen

Set-Property ist die einzige integrierte Methode, mit der Sie dies in der Pipeline sauber durchführen können, und zwar mit Platzhaltern: { sp *.txt IsReadOnly $false } OR { ls . -recurse -include *.cs | sp -name IsReadOnly -value $false }

0 Stimmen

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

3 Stimmen

@yzorg: Was genau wollen Sie mir damit sagen? Was die Antwort von Keith angeht, so benutzt er PSCX. Nicht jeder hat diese installiert und das ist nicht wirklich ein Fall von PowerShell v1 vs. v2.

18voto

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

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

Der obige Codeschnipsel stammt aus diesem Artikel

UPDATE Verwendung von Keith Hill's Umsetzung aus den Kommentaren (ich habe dies getestet, und es funktioniert), wird dies:

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

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

6 Stimmen

Die Umsetzung ist einfacher als das: $file.IsReadOnly = $false

16voto

Scott Saad Punkte 17342

Auch wenn es nicht Einheimische PowerShell, kann man immer noch die einfache Attribut Befehl zu verwenden:

attrib -R file.txt

0 Stimmen

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

1 Stimmen

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

12voto

Mariusz Gorzoch Punkte 459

Oder Sie können einfach verwenden:

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

Die obige Funktion gilt 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.

4 Stimmen

Passen Sie den Befehl (add -File) so an, dass er nur mit Dateien funktioniert. Verzeichnisse haben diese Eigenschaft nicht.

7voto

Keith Hill Punkte 183005

Wenn Sie zufällig die PowerShell-Gemeinschaftserweiterungen :

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

Sie können auch das Gegenteil tun, und zwar so:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X