Bagaimana cara Menghapus Atribut ReadOnly pada File Menggunakan PowerShell?


Jawaban:


146

Anda dapat menggunakan Set-ItemProperty:

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

atau lebih pendek:

sp file.txt IsReadOnly $false

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   
}  

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

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.


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.