เปลี่ยนเจ้าของ windows 7 ซ้ำ ๆ


95

อย่างใดฉันตั้งใจตั้งไฟล์ทั้งหมดในโฟลเดอร์ย่อยเป็น "ไม่มีเจ้าของ" และฉันไม่สามารถเปลี่ยนสิทธิ์ทั้งหมดฉันสามารถเปลี่ยนทีละไฟล์ด้วยตนเองโดยเปลี่ยนเจ้าของแล้วตั้งค่าสิทธิ์ แต่ฉันจะเปลี่ยนเจ้าของไฟล์ทั้งหมดได้อย่างไร ในไดเรกทอรีนี้ทันทีหรือไม่

คำตอบ:


92

ใช้takeownจากพรอมต์คำสั่งเพื่อเป็นเจ้าของโฟลเดอร์โฟลเดอร์ย่อยและไฟล์ทั้งหมดซ้ำ:

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

สิ่งนี้ใช้ได้ดี แต่ถ้าคุณไม่ใช้คอนโซลบรรทัดคำสั่งในฐานะผู้ดูแลระบบอาจล้มเหลวสำหรับไฟล์ที่คุณไม่ได้เป็นเจ้าของ


105

ในการแก้ไขการอนุญาตที่เสียหายจริง ๆ วิธีที่ดีที่สุดคือเรียกใช้คำสั่งสองคำสั่งต่อไปนี้:

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

คนแรกจะให้คุณเป็นเจ้าของไฟล์ทั้งหมด แต่ที่อาจไม่เพียงพอตัวอย่างเช่นถ้าไฟล์ทั้งหมดมีสิทธิ์อ่าน / เขียน / exec ตั้งค่าเป็น "ปฏิเสธ" คุณเป็นเจ้าของไฟล์ แต่ก็ยังไม่สามารถทำอะไรกับมันได้

ในกรณีนั้นให้รันคำสั่งที่สองซึ่งจะแก้ไขสิทธิ์ที่เสียหาย


3
คำแนะนำทางเทคนิคที่ยอดเยี่ยม ... ทางออกของคุณเป็นเพียงคนเดียวที่ทำงานได้ ขอบคุณอีกครั้ง.
carrabino

4
คำแนะนำที่ดีที่สุดจำเป็นต้องใช้ทั้ง takeown และ icacls
gnac

2
/ ตัวเลือกมีประโยชน์หากคุณต้องการให้ 'ความเป็นเจ้าของกับกลุ่มผู้ดูแลระบบแทนเจ้าของปัจจุบัน' คุณต้องมีสิทธิ์ผู้ดูแลระบบในการทำเช่นนี้ อาจต้องเปิดหน้าต่าง cmd โดยใช้ ctrl-shift-enter
PeterVermont

4
ฉันได้เพิ่ม/D Yพารามิเตอร์ลงไปtakeownเพื่อให้มันยืนยันไดเรกทอรีที่เรียกซ้ำโดยอัตโนมัติซึ่งคุณไม่มีสิทธิ์ 'รายการไดเรกทอรี' สำหรับ
Jeroen Wiert Pluimers

3
@JeroenWiertPluimers แม้ว่าจะเป็นคำแนะนำที่ดีฉันได้ลบการแก้ไขเนื่องจากเป็นพารามิเตอร์ที่แปลแล้ว (อย่างโง่เขลา) ดังนั้นใน Windows ภาษาอังกฤษมันจะเป็น/D Yภาษาฝรั่งเศส/D Oอาจเป็นภาษาสเปน/D Sเป็นต้น
laurent

26

หมายเหตุ: cacls ว่าจะเลิก (ตั้งแต่ Windows Vista?) icaclsและจะให้คำแนะนำให้คุณใช้

คำสั่งนี้จะรีเซ็ตการอนุญาตซ้ำอีกครั้งในโฟลเดอร์:

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

5

คุณสามารถใช้caclsจากพรอมต์คำสั่ง:

cacls "C: \ path \ to \ folder" / E / T / C / G "ผู้ดูแลระบบ": F

/Tสวิตช์ช่วยให้สามารถทำงานซ้ำ แทนที่Administratorด้วยผู้ใช้ที่คุณต้องการให้สิทธิ์


1

ฉันมีปัญหากับไฟล์ที่มีเส้นทางยาวมาก (มากกว่า 256 ตัวอักษร) ทั้งสองคำสั่ง

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

ทำงานได้ยกเว้นไฟล์เหล่านี้ที่มีเส้นทางและชื่อยาวมาก ฉันสิ้นสุดการเปลี่ยนชื่อ

"C:\path\to\really_long_folder_name"

ไปยัง

"C:\path\to\r"

แล้ววิ่ง

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

หลังจากนั้นฉันสามารถเปลี่ยนชื่อโฟลเดอร์เป็นสิ่งที่เหมาะสมกว่า takeown's / DY คำตอบใช่เพื่อแจ้ง สำหรับ icacls ฉันใช้ / ให้สิทธิ์การเข้าถึงทุกคนอย่างเต็มที่ (เนื่องจากฉันพยายามเข้าถึงข้อมูลบนฮาร์ดไดรฟ์จากพีซีที่ตายแล้ว) โดยใช้ / t เพื่อประมวลผลโฟลเดอร์ย่อยและไฟล์ / q เพื่อทำงานในโหมดเงียบ (ซ่อน สำเร็จ) และ / c เพื่อแสดงข้อผิดพลาด ฉันทำซ้ำกระบวนการเปลี่ยนชื่อโฟลเดอร์จนกว่าการอัปเดตการอนุญาตทั้งหมดของไฟล์เสร็จสมบูรณ์

หวังว่านี่จะช่วยคนที่พบข้อผิดพลาดคล้ายกับข้อผิดพลาด "ไม่สามารถระบุวัตถุในการเข้าถึงคอนเทนเนอร์ที่ถูกปฏิเสธ" ฉันได้รับเมื่อพยายามเข้าถึงข้อมูลจากฮาร์ดไดรฟ์เก่า


0

ขอบคุณ @ this.lau_ สำหรับเคล็ดลับ / รีเซ็ตนี่คือสิ่งที่ฉันต้องการเพื่อให้สคริปต์ของฉันเสร็จสมบูรณ์เพื่อให้เป็นเจ้าของ CSC และทำการสำรองข้อมูล หลังจากการเป็นเจ้าของ C: \ Windows \ CSC การอนุญาตมีแนวโน้มที่จะไม่สอดคล้องกันมากเกี่ยวกับการสืบทอด - สวิตช์ / รีเซ็ตได้แก้ไขสิ่งนี้ให้ตรงกับฉัน

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 - หากคุณตรวจสอบตัวแปร $ icaclsource จากด้านบนคุณสังเกตเห็นว่าฉันเพิ่ม "\? \" ที่ด้านหน้าของเส้นทางต้นทาง โดยการเพิ่มสิ่งนี้ไว้ด้านหน้ามันจะยอมรับชื่อไฟล์ที่ยาวขึ้น นี่เป็นปัญหาที่ฉันมี แต่สิ่งนี้แก้ไขได้! ไชโย

หยอกเย้า


ยินดีต้อนรับสู่ Super User! เพียงแจ้งให้คุณทราบว่าผู้ใช้ "ส่ง Ping" จะทำงานเฉพาะในความคิดเห็นต่อโพสต์ไม่ใช่ในโพสต์จริง น่าเสียดายที่คุณไม่สามารถแสดงความคิดเห็นในโพสต์อื่นที่ไม่ใช่ของคุณเองหรือตอบคำถามของคุณจนกว่าคุณจะมีชื่อเสียงมากกว่า 50คน ดูความคิดเห็น @replies ทำงานอย่างไร . โปรดทราบว่าคุณไม่สามารถ ping ใครก็ได้ในความคิดเห็น เฉพาะผู้เขียนโพสต์และผู้ใช้อื่น ๆ ที่ได้แสดงความคิดเห็นแล้ว
robinCTS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.