Comment supprimer l'attribut ReadOnly sur un fichier à l'aide de PowerShell?


Réponses:


146

Vous pouvez utiliser Set-ItemProperty:

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

ou plus court:

sp file.txt IsReadOnly $false

3
Set-Property est le seul moyen intégré de le faire proprement sur le pipeline, et en utilisant des caractères génériques: {sp * .txt IsReadOnly $ false} OR {ls. -recurse -include * .cs | sp -name IsReadOnly -value $ false}
Jaykul

En utilisant PowerShell v2, je vois des bindngs CmdLet difficiles à utiliser pour sp. PSCX Set-Writable et Set-ReadOnly n'ont pas ces problèmes. Je vais bloguer les problèmes que je vois et y faire un lien plus tard Je recommande la réponse de Keith pour PowerShell v2 (PowerShell moderne).
yzorg

3
@yzorg: Alors qu'est-ce que tu me dis exactement ici? Quant à la réponse de Keith, il utilise PSCX. Tout le monde ne les a pas installés et ce n'est pas vraiment un cas de 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    
}  

L'extrait de code ci-dessus est tiré de cet article

MISE À JOUR En utilisant l' implémentation de Keith Hill à partir des commentaires (j'ai testé ceci, et cela fonctionne), cela devient:

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

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

6
L'implémentation est plus simple que cela: $ file.IsReadOnly = $ false
Keith Hill

15

Même s'il ne s'agit pas de PowerShell natif , on peut toujours utiliser la simple commande Attrib pour cela:

attrib -R file.txt

Merci! Cela a fonctionné pour moi: dir. -r * .cs | % {$ _. nom complet} | % {attrib -r $ _}
Cameron Taggart

1
Aurait pu sauter une étape: dir. -r * .cs | % {attrib -r $ _. FullName}
Nathan Hartley

9

ou vous pouvez simplement utiliser:

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

Ci-dessus fonctionnera pour tous les fichiers .cs dans la sous-arborescence du dossier actuel. Si vous avez besoin d'autres types inclus, ajustez simplement "* .cs" selon vos besoins.


3
Ajustez la commande (ajoutez -File) pour ne travailler qu'avec des fichiers. Les répertoires n'ont pas la propriété.
Bobby Cannon

7

Si vous utilisez les extensions de communauté PowerShell :

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

Vous pouvez faire le contraire comme ceci:

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)

merci à tous ceux qui aident à résoudre un problème ... et aident ce code

ce code fonctionne pour moi .. pour partager un dossier avec tout le monde avec l'autorisation de lecture et d'écriture, vous pouvez l'utiliser dans .net

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.