所有者ウィンドウを再帰的に変更する7


95

どういうわけか、誤ってサブフォルダー内のすべてのファイルを「所有者なし」に設定し、すべての権限を変更できないようです。所有者を変更してから権限を設定することで手動で変更できますこのディレクトリに一度に?

回答:


92

takeownコマンドプロンプトから使用して、フォルダー、そのすべてのサブフォルダーおよびファイルの所有権を再帰的に取得します。

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

これはうまく機能しますが、コマンドラインコンソールを管理者として実行しないと、所有していないファイルに対して失敗する可能性があります。


105

本当に壊れた権限を修正するには、次の2つのコマンドを順番に実行するのが最善です。

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

最初のファイルはすべてのファイルの所有権を提供しますが、たとえば、すべてのファイルの読み取り/書き込み/実行権限が「拒否」に設定されている場合は、十分ではない場合があります。あなたはファイルを所有していますが、それでも何もできません。

その場合、2番目のコマンドを実行すると、壊れたアクセス許可が修正されます。


3
優れた技術的なアドバイス...解決したのはあなたのソリューションだけでした。再度、感謝します。
カラビノ14

4
最善のアドバイスは、takeownとicaclsの両方を使用する必要があることです。
gnac 14

2
/ Aオプションは、「現在の所有者ではなく管理者グループに所有権を与える」場合に便利です。これを行うには、管理者権限が必要です。ctrl-shift-enterを使用してcmdウィンドウを開く必要がある場合があります。
ピーターバーモント

4
/D Yパラメータを追加して、takeown「リストディレクトリ」権限を持たない再帰ディレクトリを自動確認するようにしました。
ジェローンヴィルトプルイマーズ16

3
@JeroenWiertPluimers、それは英語のWindowsでは/D Yフランス語/D O、おそらくスペイン語/D Sなどにローカライズされたパラメーターであるので(十分に)編集を削除しましたが、良いアドバイスですが
4

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文字を超える)ファイルで問題が発生しました。2つのコマンド

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の/ DYはプロンプトに対してyesと答えます。icaclsでは、/ grantを使用してすべてのユーザーに完全なアクセス権を与えました(デッドPCからハードドライブ上のデータにアクセスしようとしていたため)。/tでサブフォルダーとファイルを処理し、/ qでQuietモードで実行成功)および/ cエラーを表示します。すべてのファイルのアクセス許可が正常に更新されるまで、フォルダーの名前を変更して、プロセスを繰り返しました。

これは、古いハードドライブからデータにアクセスしようとしたときに発生した「コンテナアクセス内のオブジェクトの列挙に失敗しました」エラーに類似したエラーに遭遇した人の助けになることを願っています。


0

/ resetのヒントをくれた@ this.lau_に感謝します。これは、スクリプトを完成させて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変数をチェックアウトすると、ソースパスの前に「\?\」が追加されていることがわかります。これを先頭に追加すると、より長いファイル名が受け入れられます。これも私が抱えていた問題ですが、これで解決しました!乾杯。

ジョシュ


スーパーユーザーへようこそ!「ping」ユーザー、実際の投稿はなく投稿へのコメントでのみ機能することをお知らせします。残念ながら、50を超える評判を得るまで、自分以外の投稿や質問への回答にコメントすることはできません。コメント@repliesの仕組みをご覧ください。コメントではだれにもpingを実行できないことに注意してください。投稿の作成者と既にコメントしている他のユーザーのみ。
robinCTS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.