วิธีการลบ ReadOnly Attribute บนไฟล์โดยใช้ PowerShell


คำตอบ:


146

คุณสามารถใช้Set-ItemProperty:

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

หรือสั้นกว่า:

sp file.txt IsReadOnly $false

3
Set-Property เป็นวิธีเดียวในตัวที่คุณสามารถทำได้บนไปป์ไลน์อย่างหมดจดและใช้สัญลักษณ์แทน: {sp * .txt IsReadOnly $ false} หรือ {ls -recurse - รวม * .cs | sp -name IsReadOnly -value $ false}
Jaykul

การใช้ PowerShell v2 ฉันเห็น CmdLet bindngs ที่ใช้ยากสำหรับ sp PSCX Set-Writable และ Set-ReadOnly ไม่มีปัญหาเหล่านั้น ฉันจะบล็อกปัญหาที่พบและเชื่อมโยงไปในภายหลัง ฉันขอแนะนำคำตอบของ Keith สำหรับ PowerShell v2 (PowerShell สมัยใหม่)
yzorg

3
@yzorg: แล้วคุณบอกอะไรกับฉันที่นี่? สำหรับคำตอบของ Keith เขาใช้ PSCX ไม่ใช่ทุกคนที่ติดตั้งสิ่งเหล่านี้และนั่นไม่ใช่กรณีของ PowerShell v1 เทียบกับ 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    
}  

ข้อมูลโค้ดด้านบนนำมาจากบทความนี้

อัปเดต โดยใช้การใช้งานของKeith Hillจากความคิดเห็น (ฉันได้ทดสอบแล้วและใช้งานได้) สิ่งนี้จะกลายเป็น:

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

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

6
การนำไปใช้นั้นง่ายกว่านั้น: $ file.IsReadOnly = $ false
Keith Hill

15

แม้ว่าจะไม่ใช่Native PowerShell แต่ก็ยังสามารถใช้คำสั่งAttribง่ายๆสำหรับสิ่งนี้:

attrib -R file.txt

ขอบคุณ! สิ่งนี้ใช้ได้ผลสำหรับฉัน: ผบ. -r * .cs | % {$ _. fullname} | % {attrib -r $ _}
Cameron Taggart

1
สามารถข้ามขั้นตอน: ผบ. -r * .cs | % {attrib -r $ _. FullName}
Nathan Hartley

9

หรือคุณสามารถใช้:

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

ด้านบนจะใช้ได้กับไฟล์. cs ทั้งหมดในแผนผังย่อยของโฟลเดอร์ปัจจุบัน หากคุณต้องการประเภทอื่น ๆ ให้ปรับ "* .cs" ตามความต้องการของคุณ


3
ปรับคำสั่ง (เพิ่ม -File) เพื่อทำงานกับไฟล์เท่านั้น ไดเรกทอรีไม่มีคุณสมบัติ
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)

ขอบคุณสำหรับทุกคนที่ช่วยแก้ปัญหา ... และช่วยรหัสนี้

รหัสนี้ใช้งานได้สำหรับฉัน .. เพื่อแบ่งปันโฟลเดอร์ให้กับทุกคนด้วยสิทธิ์อ่านและเขียนคุณสามารถใช้สิ่งนี้ใน. net

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.