2017-05-04 120 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可以非常有效地執行此操作,而且不會出現字符串解析錯誤的風險。檢查一個循環中的所有ACL,修復另一個循環。

btw。沒有for /D /r。/r可能被忽略。