Làm thế nào để loại bỏ thuộc tính ReadOnly trên tệp bằng PowerShell?


Câu trả lời:


146

Bạn có thể sử dụng Set-ItemProperty:

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

hoặc ngắn hơn:

sp file.txt IsReadOnly $false

3
Set-Property là cách tích hợp duy nhất bạn có thể thực hiện một cách rõ ràng trên đường dẫn và sử dụng các ký tự đại diện: {sp * .txt IsReadOnly $ false} HOẶC {ls. -recurse -include * .cs | sp -name IsReadOnly -value $ false}
Jaykul

Sử dụng PowerShell v2 Tôi thấy các bindngs CmdLet khó sử dụng cho sp. PSCX Set-W ghi và Set-ReadOnly không gặp những vấn đề đó. Tôi sẽ viết blog các vấn đề tôi đang gặp và liên kết với nó sau. Tôi đề xuất câu trả lời của Keith cho PowerShell v2 (PowerShell hiện đại).
yzorg

3
@yzorg: Vậy chính xác thì bạn đang nói gì với tôi ở đây? Đối với câu trả lời của Keith, anh ấy đang sử dụng PSCX. Không phải ai cũng đã cài đặt những ứng dụng đó và đó không thực sự là trường hợp của PowerShell v1 so với 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    
}  

Đoạn mã trên được lấy từ bài viết này

CẬP NHẬT Sử dụng cách triển khai của Keith Hill từ các nhận xét (tôi đã thử nghiệm điều này và nó hoạt động), điều này trở thành:

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

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

6
Việc triển khai đơn giản hơn thế: $ file.IsReadOnly = $ false
Keith Hill

15

Mặc dù nó không phải là Native PowerShell, người ta vẫn có thể sử dụng lệnh Attrib đơn giản cho việc này:

attrib -R file.txt

Cảm ơn! Điều này đã làm việc cho tôi: dir. -r * .cs | % {$ _. fullname} | % {do -r $ _}
Cameron Taggart

1
Có thể đã bỏ qua một bước: dir. -r * .cs | % {do -r $ _. FullName}
Nathan Hartley

9

hoặc bạn có thể chỉ cần sử dụng:

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

Ở trên sẽ hoạt động cho tất cả các tệp .cs trong cây con của thư mục hiện tại. Nếu bạn cần các loại khác đi kèm thì chỉ cần điều chỉnh "* .cs" theo nhu cầu của bạn.


3
Điều chỉnh lệnh (add -File) để chỉ hoạt động với các tệp. Thư mục không có tài sản.
Bobby Cannon


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)

cảm ơn vì bất kỳ ai đang giúp giải quyết một số vấn đề ... và giúp mã này

mã này đang hoạt động đối với tôi .. để chia sẻ một thư mục cho mọi người với quyền đọc và ghi, bạn có thể sử dụng mã này trong .net

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.