Come rimuovere l'attributo di sola lettura su file utilizzando PowerShell?


Risposte:


146

Puoi usare Set-ItemProperty:

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

o più breve:

sp file.txt IsReadOnly $false

3
Set-Property è l'unico modo integrato in cui puoi farlo in modo pulito sulla pipeline e utilizzando i caratteri jolly: {sp * .txt IsReadOnly $ false} OR {ls. -recurse -include * .cs | sp -name IsReadOnly -value $ false}
Jaykul

Utilizzando PowerShell v2 vedo bindng CmdLet difficili da usare per sp. PSCX Set-Writable e Set-ReadOnly non hanno questi problemi. Pubblicherò i problemi che vedo e collegherò ad essi in seguito. Raccomando la risposta di Keith per PowerShell v2 (moderno PowerShell).
yzorg

3
@yzorg: Allora cosa mi stai dicendo esattamente qui? Per quanto riguarda la risposta di Keith, sta usando PSCX. Non tutti hanno quelli installati e non è proprio un caso di 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    
}  

Lo snippet di codice precedente è tratto da questo articolo

AGGIORNAMENTO Utilizzando l' implementazione di Keith Hill dai commenti (l'ho testato e funziona), questo diventa:

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

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

6
L'implementazione è più semplice di questa: $ file.IsReadOnly = $ false
Keith Hill,

15

Anche se non è Native PowerShell, è comunque possibile utilizzare il semplice comando Attrib per questo:

attrib -R file.txt

Grazie! Questo ha funzionato per me: dir. -r * .cs | % {$ _. fullname} | % {attrib -r $ _}
Cameron Taggart

1
Potrebbe aver saltato un passaggio: dir. -r * .cs | % {attrib -r $ _. FullName}
Nathan Hartley

9

oppure puoi semplicemente usare:

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

Sopra funzionerà per tutti i file .cs nel sottoalbero della cartella corrente. Se hai bisogno di altri tipi inclusi, regola semplicemente "* .cs" in base alle tue esigenze.


3
Regola il comando (aggiungi -File) per lavorare solo con i file. Le directory non hanno la proprietà.
Bobby Cannon

7

Se ti capita di utilizzare le estensioni della community di PowerShell :

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

Puoi fare il contrario in questo modo:

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)

grazie per chiunque stia aiutando a risolvere qualche problema ... e aiutando questo codice

questo codice sta funzionando per me .. per condividere una cartella con tutti con i permessi di lettura e scrittura puoi usarlo in .net

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.