如何使用PowerShell删除文件上的ReadOnly属性?


Answers:


146

您可以使用Set-ItemProperty

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

或更短:

sp file.txt IsReadOnly $false

3
Set-Property是您可以在管道上使用通配符干净地进行操作的唯一内置方法:{sp * .txt IsReadOnly $ false}或{ls。-递归-include * .cs | sp -name IsReadOnly
-value

使用PowerShell v2,我看到了sp难以使用的CmdLet bindngs。PSCX的Set-Writable和Set-ReadOnly没有这些问题。我将在博客中列出我遇到的问题,并在以后链接到该问题。我推荐Keith针对PowerShell v2(现代PowerShell)的答案。
yzorg 2011年

3
@yzorg:那你到底在告诉我什么?至于Keith的答案,他正在使用PSCX。并非每个人都安装了这些工具,而PowerShell v1 vs. v2并非如此。
乔伊,

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    
}  

上面的代码段摘自本文

UPDATE 使用基思·希尔的实施从评论(我已经进行了测试,它的工作),这将成为:

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

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

6
实现比这简单:$ file.IsReadOnly = $ false
Keith Hill


9

或者您可以简单地使用:

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

以上将适用于当前文件夹子树中的所有.cs文件。如果需要包括其他类型,只需根据需要调整“ * .cs”即可。


3
调整命令(添加-File)以仅使用文件。目录不具有该属性。
鲍比·坎农

7

如果碰巧正在使用PowerShell社区扩展

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

您可以这样做相反:

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)

感谢任何帮助解决某些问题并帮助编写此代码的人

这段代码对我有用。.与具有读写权限的每个人共享一个文件夹,您可以在.net中使用此代码

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.