題 遞歸更改所有者窗口7


不知何故,我不小心將子文件夾中的所有文件設置為“No Owner”,我似乎無法更改所有權限。我可以通過更改所有者然後設置權限手動更改一個但是如何更改所有文件的所有者在這個目錄中一次?


87
2018-03-05 18:23


起源




答案:


使用 takeown 從命令提示符以遞歸方式獲取文件夾,所有子文件夾和文件的所有權:

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

這很有效,但如果您不以管理員身份運行命令行控制台,則對於您不擁有的文件可能會失敗。


83
2018-03-05 18:37





要修復真正損壞的權限,最好是一個接一個地運行這兩個命令:

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

第一個將為您提供所有文件的所有權,但這可能還不夠,例如,如果所有文件的讀/寫/執行權限都設置為“拒絕”。您擁有這些文件,但仍無法對它們執行任何操作。

在這種情況下,運行第二個命令,它將修復損壞的權限。


94
2018-01-01 11:16



優秀的技術建議......您的解決方案是唯一有效的解決方案。再次感謝。 - carrabino
最好的建議,需要同時使用takeown和icacls。 - gnac
/如果您希望將“所有權授予管理員組而不是當前所有者”,則選項很有用。您需要具有管理員權限才能執行此操作。可能需要使用ctrl-shift-enter打開cmd窗口。 - PeterVermont
我添加了 /D Y 參數來 takeown 所以它會自動確認你沒有'list directory'權限的遞歸目錄。 - Jeroen Wiert Pluimers
@JeroenWiertPluimers,雖然這是一個很好的建議我已經刪除了編輯,因為它(愚蠢地)一個本地化的參數所以在英文Windows上它將是 /D Y,在法國人 /D O,也許是西班牙語 /D S等 - this.lau_


請注意,不推薦使用cacls(因為Windows Vista?),它建議您使用 icacls

此命令將遞歸重置文件夾的權限:

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

26
2017-10-05 07:47





您可以使用 cacls 從命令提示符:

cacls“C:\ path \ to \ folder”/ E / T / C / G“管理員”:F

/T switch允許它以遞歸方式運行。更換 Administrator 與您希望授予權限的用戶。


5
2018-03-05 18:37





我遇到路徑很長(大於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 / D Y對提示回答是。對於icacls我使用/ grant來給所有人提供完全訪問權限(因為我只是試圖從死機PC訪問硬盤驅動器上的數據),使用/ t處理子文件夾和文件,/ q以安靜模式運行(隱藏成功)和/ c顯示錯誤。我重複了這個過程,重命名文件夾,直到所有文件權限都成功更新。

希望這有助於遇到類似於“未能枚舉容器訪問中的對象”的錯誤的人在嘗試從舊硬盤訪問數據時遇到的錯誤。


1
2018-01-11 10:36





感謝@this.lau_為/ reset提示,這正是我需要完成我的腳本以獲得CSC的所有權並對其進行備份。在獲得C:\ Windows \ CSC的所有權後,權限往往在繼承方面變得非常不一致 - / reset開關直接為我修復了這個問題。

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變量,你會注意到我在源路徑前添加了“\?\”。通過在前面添加它,它將接受更長的文件名。這也是我遇到的一個問題,但是這個問題解決了!乾杯。

玩笑


0
2018-06-15 23:16



歡迎來到超級用戶!只是讓你知道“ping”用戶只能在帖子的評論中使用,而不是 在 實際的帖子。很遺憾,除非您有自己的帖子或問題的答案,否則您無法發表評論 50+聲望。看到 評論@replies如何運作?。請注意,您不能只在評論中ping任何人。只有該帖子的作者和已經評論過的任何其他用戶。 - robinCTS