рекурсивно змінювати власника 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

Перший дасть вам право власності на всі файли, однак цього може бути недостатньо, наприклад, якщо для всіх файлів встановлено "заборонити" дозволу читання / записування / виконання. Ви володієте файлами, але все одно не можете з ними нічого робити.

У цьому випадку запустіть другу команду, яка виправить зламані дозволи.


3
Відмінна технічна порада ... ваше рішення було єдиним, що спрацювало. Знову дякую.
carrabino

4
Найкраща порада, потрібно використовувати як знімання, так і icacls.
гнак

2
/ Варіант корисний, якщо ви хочете надати "право власності на групу адміністраторів замість поточного власника". Для цього вам потрібно мати права адміністраторів. Може знадобитися відкрити вікно cmd за допомогою ctrl-shift-enter.
ПітерВермонт

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: \ шлях \ до \ папки" / 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_ за пораду / reset, саме це мені потрібно було виконати сценарій, щоб взяти право власності на 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 зверху, ви помітите, що я додаю "\? \" Перед вихідним шляхом. Додавши це в передній частині, він прийме довші імена файлів. Це теж проблема, яка у мене була, але це виправлено! Ура.

Джош


Ласкаво просимо до Супер Користувача! Просто повідомляючи про те, що користувачі "пінг" працюють лише в коментарях до публікацій, а не у власних публікаціях. На жаль, ви не можете коментувати публікації, окрім власних, або відповіді на ваші запитання, доки ви не отримаєте репутацію 50+ . Див. Як працюють коментарі @ відповіді? . Зауважте, що ви не можете просто пінгнути когось у коментарі. Лише автор публікації та будь-який інший користувач, який уже коментував.
robinCTS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.