secara rekursif mengubah pemilik windows 7

95

Entah bagaimana saya secara tidak sengaja mengatur semua file dalam subfolder ke "No Owner 'dan saya sepertinya tidak dapat mengubah semua izin. Saya dapat mengubah satu dengan tangan dengan mengubah pemilik lalu mengatur izin tetapi bagaimana cara mengubah pemilik semua file dalam direktori ini sekaligus?

laurent
sumber

Jawaban:

92

Gunakan takeowndari prompt perintah untuk mengambil kepemilikan folder, semua subfolder dan file secara rekursif:

takeown /f "c:\folder\subfolder" /r

Ini berfungsi dengan baik, tetapi jika Anda tidak menjalankan konsol baris perintah sebagai administrator, mungkin gagal untuk file yang bukan milik Anda.

Kez
sumber
105

Untuk memperbaiki izin yang benar-benar rusak, yang terbaik adalah menjalankan kedua perintah ini satu demi satu:

takeown /f "C:\path\to\folder" /r
icacls "C:\path\to\folder" /reset /T

Yang pertama akan memberi Anda kepemilikan semua file, namun itu mungkin tidak cukup, misalnya jika semua file memiliki izin baca / tulis / exec diatur ke "deny". Anda memiliki file tetapi masih tidak dapat melakukan apa pun dengan mereka.

Dalam hal ini, jalankan perintah kedua, yang akan memperbaiki izin yang rusak.

laurent
sumber
3
Saran teknis yang sangat baik ... solusi Anda adalah satu-satunya yang berhasil. Terima kasih lagi.
carrabino
4
Saran terbaik, perlu menggunakan takeown dan icacls.
gnac
2
/ Opsi berguna jika Anda ingin memberikan 'kepemilikan kepada grup administrator alih-alih pemilik saat ini'. Anda perlu memiliki hak administrator untuk melakukan ini. Mungkin perlu membuka jendela cmd menggunakan ctrl-shift-enter.
PeterVermont
4
Saya telah menambahkan /D Yparameternya takeownsehingga secara otomatis mengkonfirmasi direktori berulang di mana Anda tidak memiliki izin 'daftar direktori'.
Jeroen Wiert Pluimers
3
@ JoeroenWiertPluimers, meskipun itu saran yang baik saya telah menghapus hasil edit karena itu (cukup bodoh) parameter terlokalisasi sehingga pada bahasa Inggris Windows akan /D Y, pada Perancis /D O, mungkin pada Spanyol /D S, dll.
laurent
26

Perhatikan bahwa cacl sudah usang (karena Windows Vista?) Dan menyarankan Anda untuk menggunakan icacls.

Perintah ini akan mengatur ulang izin pada folder secara rekursif:

icacls "C:\path\to\folder" /reset /T
dari sana
sumber
5

Anda dapat menggunakan caclsdari command prompt:

cacls "C: \ path \ to \ folder" / E / T / C / G "Administrator": F

The /Tswitch memungkinkan untuk berfungsi secara rekursif. Ganti Administratordengan pengguna yang ingin Anda beri izin.

John T
sumber
1

Saya punya masalah dengan file dengan jalur yang sangat panjang (lebih dari 256 karakter). Kedua perintah itu

takeown /f "C:\path\to\really_long_folder_name" /r
icacls "C:\path\to\really_long_folder_name" /reset /T

bekerja kecuali untuk file-file ini dengan jalur dan nama yang sangat panjang. Saya akhirnya mengganti nama

"C:\path\to\really_long_folder_name"

untuk

"C:\path\to\r"

dan kemudian berlari

takeown /f "C:\path\to\r" /r /D Y
icacls "C:\path\to\r" /grant Everyone:(F) /t /c /q

setelah itu saya bisa mengganti nama folder menjadi sesuatu yang lebih masuk akal. takeown's / DY menjawab ya untuk diminta. Untuk icacls saya menggunakan / memberikan untuk memberikan akses penuh kepada semua orang (karena saya hanya mencoba mengakses data pada hard drive dari PC yang mati), dengan / t untuk memproses sub folder dan file, / q untuk dijalankan dalam mode senyap (sembunyikan berhasil) dan / c untuk menunjukkan kesalahan. Saya mengulangi prosesnya, mengganti nama folder hingga semua izin file berhasil diperbarui.

Mudah-mudahan ini membantu seseorang yang menemukan kesalahan mirip dengan "gagal untuk menghitung objek dalam akses kontainer ditolak" kesalahan yang saya dapatkan ketika mencoba untuk mendapatkan akses ke data dari hard drive lama.

Thesle Williams
sumber
0

Terima kasih @ this.lau_ untuk tip / reset, inilah tepatnya yang saya butuhkan untuk menyelesaikan skrip untuk mengambil kepemilikan CSC dan membuat cadangannya. Setelah mengambil kepemilikan C: \ Windows \ CSC izin cenderung menjadi sangat tidak konsisten mengenai pewarisan - saklar / reset memperbaiki ini secara langsung untuk saya.

Function Copy-CSCData {
    $Datetime = Get-Date -Format yyyyMMdd.hhmmss
    $LogPath = 'PATH TO LOG'
    $CSCSource = 'C:\Windows\CSC\v2.0.6\namespace'
    $Dest = 'DESTINATION PATH'
    $icaclsource = "\\?\" + $CSCSource

    $CSCLogfile = "$LogPath\" + "$Datetime" + "_CSCRobocopy.log"

    icacls.exe $icaclsource /reset /T
    icacls.exe $icaclsource /grant :r "Everyone:(OI)(CI)F"

    Robocopy $CSCSource $Dest /Copy:DATSO /E /XO /Z /LOG+:$CSCLogfile /V /FP /NP /R:2 /W:2 /XF "~$*","*.tmp"
}

@Thesle Williams - jika Anda memeriksa variabel $ icaclsource dari atas Anda perhatikan saya menambahkan "\? \" Di depan jalur sumber. Dengan menambahkan ini di depan, ia akan menerima nama file yang lebih panjang. Ini juga masalah yang saya punya tetapi ini memperbaikinya! Tepuk tangan.

Josh

Joshua Biddle
sumber
Selamat Datang di Pengguna Super! Hanya memberi tahu Anda bahwa "ping" pengguna hanya bekerja di komentar ke pos, bukan di pos yang sebenarnya. Sayangnya Anda tidak dapat mengomentari kiriman selain dari milik Anda, atau pada jawaban atas pertanyaan Anda, sampai Anda memiliki 50+ reputasi . Lihat Bagaimana cara kerja comment @balasan? . Perhatikan bahwa Anda tidak bisa hanya mem-ping siapa pun dalam komentar. Hanya pembuat posting dan pengguna lain yang telah berkomentar.
robinCTS