đệ quy thay đổi cửa sổ chủ sở hữu 7


95

Bằng cách nào đó, tôi vô tình đặt tất cả các tệp trong thư mục con thành "Không có chủ sở hữu" và dường như tôi không thể thay đổi tất cả các quyền. Tôi có thể thay đổi từng quyền bằng cách thay đổi chủ sở hữu sau đó đặt quyền nhưng làm cách nào tôi có thể thay đổi chủ sở hữu của tất cả các tệp trong thư mục này cùng một lúc?

Câu trả lời:


92

Sử dụng takeowntừ dấu nhắc lệnh để sở hữu một thư mục, tất cả các thư mục con và tệp của nó đệ quy:

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

Điều này hoạt động tốt, nhưng nếu bạn không chạy bảng điều khiển dòng lệnh của mình với tư cách quản trị viên thì có thể thất bại đối với các tệp bạn không sở hữu.


105

Để sửa các quyền thực sự bị hỏng, tốt nhất là chạy hai lệnh này lần lượt:

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

Cái đầu tiên sẽ cung cấp cho bạn quyền sở hữu tất cả các tệp, tuy nhiên điều đó có thể không đủ, ví dụ nếu tất cả các tệp có quyền đọc / ghi / thực thi được đặt thành "từ chối". Bạn sở hữu các tập tin nhưng vẫn không thể làm bất cứ điều gì với chúng.

Trong trường hợp đó, hãy chạy lệnh thứ hai, nó sẽ sửa các quyền bị hỏng.


3
Tư vấn kỹ thuật tuyệt vời ... giải pháp của bạn là giải pháp duy nhất hiệu quả. Cảm ơn một lần nữa.
carrabino

4
Lời khuyên tốt nhất, cần sử dụng cả Takeown và icacls.
gnac

2
/ Tùy chọn hữu ích nếu bạn muốn trao 'quyền sở hữu cho nhóm quản trị viên thay vì chủ sở hữu hiện tại'. Bạn cần có đặc quyền Quản trị viên để làm điều này. Có thể cần phải mở cửa sổ cmd bằng cách sử dụng ctrl-shift-enter.
PeterVermont

4
Tôi đã thêm /D Ytham số để takeownnó tự động xác nhận các thư mục được đệ quy nơi bạn không có quyền 'danh sách thư mục'.
Jeroen Wiert Pluimers

3
@JeroenWiertPluimers, mặc dù đó là một lời khuyên tốt Tôi đã gỡ bỏ nội dung chỉnh sửa nó (ngớ ngẩn đủ) một tham số địa phương vv English Windows, nó sẽ được /D Y, trên một người Pháp /D O, có lẽ vào Tây Ban Nha /D S, vv
laurent

26

Lưu ý rằng cacls không được dùng nữa (kể từ Windows Vista?) Và nó khuyên bạn nên sử dụng icacls.

Lệnh này sẽ thiết lập lại đệ quy các quyền trên một thư mục:

icacls "C:\path\to\folder" /reset /T

5

Bạn có thể sử dụng caclstừ dấu nhắc lệnh:

cacls "C: \ path \ to \ thư mục" / E / T / C / G "Quản trị viên": F

Việc /Tchuyển đổi cho phép nó hoạt động đệ quy. Thay thế Administratorbằng người dùng mà bạn muốn cấp quyền.


1

Tôi gặp vấn đề với các tệp có đường dẫn rất dài (lớn hơn 256 ký tự). Hai lệnh

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

làm việc ngoại trừ các tệp này với các đường dẫn và tên thực sự dài. Tôi đã kết thúc việc đổi tên

"C:\path\to\really_long_folder_name"

đến

"C:\path\to\r"

và sau đó chạy

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

sau đó tôi có thể đổi tên các thư mục thành một cái gì đó hợp lý hơn. câu trả lời của Takeown / DY có cho lời nhắc. Đối với icacls tôi đã sử dụng / cấp để cấp quyền truy cập đầy đủ cho mọi người (vì tôi chỉ cố truy cập dữ liệu trên ổ cứng từ PC chết), với / t để xử lý các thư mục và tệp phụ, / q để chạy ở chế độ im lặng (ẩn thành công) và / c để hiển thị lỗi. Tôi đã lặp lại quá trình, đổi tên thư mục cho đến khi tất cả các quyền của tập tin được cập nhật thành công.

Hy vọng rằng điều này sẽ giúp những người gặp phải lỗi tương tự như lỗi "không thể liệt kê các đối tượng trong truy cập vùng chứa bị từ chối" mà tôi gặp phải khi cố gắng truy cập dữ liệu từ ổ cứng cũ.


0

Cảm ơn @ this.lau_ về mẹo / reset, đây chính xác là những gì tôi cần để hoàn thành tập lệnh của mình để sở hữu CSC và tạo bản sao lưu của nó. Sau khi sở hữu C: \ Windows \ CSC, các quyền có xu hướng rất không nhất quán về quyền thừa kế - công tắc / reset đã khắc phục điều này ngay lập tức cho tôi.

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 - nếu bạn kiểm tra biến $ icaclsource từ phía trên, bạn nhận thấy tôi thêm "\? \" Trước đường dẫn nguồn. Bằng cách thêm cái này ở phía trước, nó sẽ chấp nhận tên tệp dài hơn. Đây cũng là một vấn đề tôi gặp phải nhưng điều này đã khắc phục nó! Chúc mừng.

Josh


Chào mừng bạn đến với Siêu người dùng! Chỉ cần cho bạn biết rằng "ping" người dùng chỉ hoạt động trong các bình luận cho bài viết, không phải trong các bài viết thực tế. Thật không may, bạn không thể nhận xét về các bài đăng khác ngoài bài viết của mình hoặc câu trả lời cho câu hỏi của bạn cho đến khi bạn có hơn 50 danh tiếng . Xem Làm thế nào để bình luận @replies hoạt động? . Lưu ý rằng bạn không thể ping bất cứ ai trong một bình luận. Chỉ có tác giả của bài đăng và bất kỳ người dùng khác đã bình luận.
robinCTS
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.