рекурсивно сменить владельца windows 7

88702
this.lau_

Каким-то образом я случайно установил все файлы в подпапке «Нет владельца», и я не могу изменить все разрешения. Я могу изменить одно вручную, изменив владельца, затем установив разрешения, но как мне изменить владельца всех файлов? в этот каталог сразу?

87

6 ответов на вопрос

95
this.lau_

Чтобы исправить действительно нарушенные права доступа, лучше всего запускать эти две команды одну за другой:

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

Первый даст вам право владения всеми файлами, однако этого может быть недостаточно, например, если все файлы имеют разрешения на чтение / запись / выполнение, для которых установлено значение «Запретить». У вас есть файлы, но вы ничего не можете с ними сделать.

В этом случае запустите вторую команду, которая исправит нарушенные права доступа.

Отличный технический совет ... Ваше решение было единственным, которое сработало. Еще раз спасибо. carrabino 9 лет назад 3
Лучший совет, нужно использовать как takeown и icacls. gnac 9 лет назад 4
Это решит проблемы, даже если есть запрещенный набор разрешений bradvido 8 лет назад 0
Параметр / полезен, если вы хотите передать «право собственности на группу администраторов вместо текущего владельца». Вы должны иметь права администратора, чтобы сделать это. Может потребоваться открыть окно cmd с помощью ctrl-shift-enter. PeterVermont 8 лет назад 1
Я добавил параметр `/ DY` в` takeown`, чтобы он автоматически подтверждал повторяющиеся каталоги, для которых у вас нет прав 'list directory'. Jeroen Wiert Pluimers 7 лет назад 3
@JeroenWiertPluimers, хотя это хороший совет, я удалил редактирование, так как это (достаточно глупо) локализованный параметр, поэтому в английской Windows это будет `/ DY`, во французском` / DO`, возможно, в испанском `/ DS` , так далее. this.lau_ 6 лет назад 2
83
Kez

Используйте takeownиз командной строки, чтобы получить право собственности на папку, все ее подпапки и файлы рекурсивно:

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

Это хорошо работает, но если вы не запускаете консоль командной строки от имени администратора, это может привести к сбою файлов, которыми вы не владеете.

26
therefromhere

Обратите внимание, что cacls устарела (начиная с Windows Vista?), И она советует вам использовать icacls.

Эта команда рекурсивно сбросит разрешения для папки:

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

Вы можете использовать caclsиз командной строки:

cacls "C: \ path \ to \ folder" / E / T / C / G "Администратор": F

/TПереключатель позволяет ему работать рекурсивно. Замените Administratorна пользователя, которому вы хотите дать разрешения.

1
Thesle Williams

У меня были проблемы с файлами с очень длинными путями (больше 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 я использовал / grant, чтобы дать полный доступ всем (так как я просто пытался получить доступ к данным на жестком диске с мертвого ПК), с / t для обработки подпапок и файлов, / q для запуска в тихом режиме (скрыть успехи) и / с, чтобы показать ошибки. Я повторил процесс, переименовывая папки, пока все права доступа к файлам не были успешно обновлены.

Надеюсь, это поможет кому-то, кто сталкивался с ошибками, похожими на ошибки «не удалось перечислить объекты в доступе к контейнеру», которые я получал при попытке получить доступ к данным со старого жесткого диска.

0
Joshua Biddle

Спасибо @ 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 сверху, вы заметите, что я добавляю "\? \" Перед исходным путем. Добавив это в начало, он примет более длинные имена файлов. Это тоже проблема, которая у меня была, но это исправило! Приветствия.

мистифицировать

Добро пожаловать в Супер пользователя! Просто сообщаю вам, что «пингующие» пользователи работают только в комментариях к сообщениям, а не * в * реальных сообщениях. К сожалению, вы не можете комментировать посты, отличные от ваших, или ответы на ваши вопросы, пока у вас не будет [50+ репутация] (// superuser.com/help/privileges/comment). См. [Как работает комментарий @replies?] (// meta.stackexchange.com/q/43019). Обратите внимание, что вы не можете просто пинговать кого-либо в комментарии. Только автор поста и любой другой пользователь, который уже прокомментировал. robinCTS 5 лет назад 0