Bagaimana cara Menghapus Atribut ReadOnly pada File Menggunakan PowerShell?

99

Bagaimana cara menghapus atribut ReadOnly pada file, menggunakan skrip PowerShell (versi 1.0)?

MagicAndi
sumber

Jawaban:

146

Anda dapat menggunakan Set-ItemProperty:

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

atau lebih pendek:

sp file.txt IsReadOnly $false
Joey
sumber
3
Set-Property adalah satu-satunya cara bawaan Anda dapat melakukannya dengan rapi di pipeline, dan menggunakan karakter pengganti: {sp * .txt IsReadOnly $ false} OR {ls. -recurse -include * .cs | sp -name IsReadOnly -value $ false}
Jaykul
Menggunakan PowerShell v2 Saya melihat CmdLet bindngs yang sulit digunakan untuk sp. PSCX Set-Writable dan Set-ReadOnly tidak memiliki masalah tersebut. Saya akan menulis blog masalah yang saya lihat dan menautkannya nanti. Saya merekomendasikan jawaban Keith untuk PowerShell v2 (PowerShell modern).
yzorg
3
@yzorg: Jadi apa sebenarnya yang kamu ceritakan di sini? Adapun jawaban Keith, dia menggunakan PSCX. Tidak semua orang menginstalnya dan itu bukan kasus 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    
}  

Potongan kode di atas diambil dari artikel ini

UPDATE Menggunakan implementasi Keith Hill dari komentar (Saya telah menguji ini, dan berhasil), ini menjadi:

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

if ($file.IsReadOnly -eq $true)  
{  
  $file.IsReadOnly = $false   
}  
MagicAndi
sumber
6
Implementasinya lebih sederhana dari itu: $ file.IsReadOnly = $ false
Keith Hill
15

Meskipun ini bukan PowerShell Asli , Anda masih dapat menggunakan perintah Attrib sederhana untuk ini:

attrib -R file.txt
Scott Saad
sumber
Terima kasih! Ini berhasil untuk saya: dir. -r * .cs | % {$ _. nama lengkap} | % {attrib -r $ _}
Cameron Taggart
1
Bisa melewatkan satu langkah: dir. -r * .cs | % {attrib -r $ _. FullName}
Nathan Hartley
9

atau Anda dapat menggunakan:

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

Di atas akan berfungsi untuk semua file .cs di sub-pohon folder saat ini. Jika Anda ingin jenis lain disertakan, cukup sesuaikan "* .cs" dengan kebutuhan Anda.

Mariusz Gorzoch
sumber
3
Sesuaikan perintah (tambahkan -File) untuk hanya bekerja dengan file. Direktori tidak memiliki properti.
Bobby Cannon
7

Jika Anda kebetulan menggunakan Ekstensi Komunitas PowerShell :

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

Anda dapat melakukan yang sebaliknya seperti ini:

PS> dir . -r *.cs | Set-ReadOnly
# Using alias sro
PS> dir . -r *.cs | sro
Keith Hill
sumber
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)

terima kasih untuk siapa saja yang membantu memecahkan beberapa masalah ... dan membantu kode ini

kode ini berfungsi untuk saya .. untuk membagikan folder kepada semua orang dengan izin baca dan tulis, Anda dapat menggunakan ini di .net

redz
sumber