2017-05-04 4 views
0

現在、「Avid MediaFiles」という名前のディレクトリにあるすべてのファイル/サブフォルダを検索し、フルコントロールのアクセス権を付与し+結果をテキストファイルに出力するスクリプトがあります。特定のフォルダに対するバッチスクリプトアクセス許可

cd /d Y:\UserWorkspaces 
FOR /D /r %%g in ("Avid MediaFiles*") DO icacls "%%g" /grant "Administrators":(OI)(CI)F /T >> Avid_Permissions_Fixed.txt 

それとの唯一の問題は、それが実行しているたら、それは関係なく、彼らの許可状態のすべてのファイル/フォルダを修正することを前に固定されているものも含めています。理想的には、すでに完全な制御権を持っているものを修正し、そうでないものを変更することをスキップする条件を追加したいと思います。それはバッチスクリプトだけで実現可能ですか?

答えて

0

スクリプトはかなり複雑ですが、可能です。
許可を確認する必要はありません。それが設定されている場合は、再度設定することは何の害もありません。
あなたは、このように特定の権限を確認することができます。

icacls . | find "Administrators:(OI)(CI)(F)" 
if errorlevel 1 echo Doesn't have this permission 

が、それは正確に(OI)(CI)(F)としてはない場合、あなたは偽陽性を持っています。

/Tを取り除いて、各フォルダとファイルを繰り返し処理する必要があります。icacls全体の解析をもっと難しくしたくない場合は、/T出力構造。

問題の原因はおそらく別の方法です。正確に何が起こっているのか調べる。
あなたはそれらのフォルダ内の特定のファイル/フォルダの任意の特定の権限を必要としない、すべてのファイル/フォルダは自分の継承がオンになっている場合は、単純な
FOR /D %%g in ("Y:\UserWorkspaces\Avid MediaFiles*") DO icacls %%g /reset /T
が動作する必要がある場合。フォルダ内で移動されたファイルのアクセス許可を、アクセスを制限された場所から修正します。新しい権限は追加されませんが、明示的な権限は削除されます。

何かもっと複雑なことについては、バッチを使用することを迷惑にも思いません。 PowerShellでは、文字列の解析エラーが発生することなく、これを非常に効果的に実行できます。 1つのループですべてのACLをチェックし、別のループで修正します。

btw。 for /D /rはありません。おそらく/ rは無視されます。

関連する問題