如何使用 PowerShell 删除文件的只读属性?

如何使用 PowerShell (版本1.0)脚本删除文件上的 ReadOnly 属性?

80242 次浏览
$file = Get-Item "C:\Temp\Test.txt"


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

The above code snippet is taken from this article

UPDATE Using Keith Hill's implementation from the comments (I have tested this, and it does work), this becomes:

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


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

If you happen to be using the PowerShell Community Extensions:

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

You can do the opposite like so:

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

You can use Set-ItemProperty:

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

or shorter:

sp file.txt IsReadOnly $false

Even though it's not Native PowerShell, one can still use the simple Attrib command for this:

attrib -R file.txt
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)

thanks for anybody who are helping to solved some problem...and helping this code

this code is working for me.. to share a folder to every one with read and write permission you can use this in .net

or you can simply use:

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

Above will work for all .cs files in sub-tree of current folder. If you need other types included then simply adjust "*.cs" to your needs.

None of the solutions above change the READONLY status of folders and files but this PowerShell script does based on the following powershell commands.

Query the READONLY status of a folder (via the DirectoryInfo object)

$roStatus = $dirInfo.Attributes -match 'ReadOnly'

Change the READONLY status of a folder (via the DirectoryInfo object)

$dirInfo.Attributes += 'ReadOnly'
$dirInfo.Attributes -= 'ReadOnly'

Query the READONLY status of a file (using the file name)

$roStatus = Get-ItemPropertyValue -Path $strFileName -Name IsReadOnly

Change the READONLY status of a file (using the file name)

Set-ItemProperty -Path $strFileName -Name IsReadOnly -Value $false