2013-05-08 144 views
0

的傳承這是一種有趣的問題,所以請原諒這裏:批處理腳本執行的第三級文件夾

我有三個層次用於同步文件到最終用戶設備嵌套的文件夾 - 上第一級管理員有權限,第二級最終用戶擁有(明確的&個人)權限,第三級有內容(文件和通常更多的文件夾)。

問題出現時(有時)內容被移動到第三個層次沒有從它上面的文件夾繼承權限 - 所以我們的用戶結束他們的目錄中的內容,他們沒有權限(以及,無法同步數據)。

爲了彌補這一點,我正在嘗試編寫一個批處理腳本(要在每日計劃中運行),該腳本深入第三級文件夾並重置ACL上的繼承標誌。該腳本不會觸及第二級文件夾的權限(因爲它將刪除最終用戶的顯式權限),這一點很重要。

這裏是我與(是的,它是非常簡單的)工作的腳本:

SET base=C:\testPrivate 
SET subfolders=.\* 

FOR /r %base% %%a in (.) do 
     (
     icacls.exe %subfolders% /reset /t 
     ) 
exit /b 

的劇本,我試圖建立目前,它重置的一切權限的問題(包括第二級別)低於它正在處理的目錄。

是否有一個標誌或變量,我可以使用該/ r標誌的工作目錄並將其提供給%子文件夾%,以便icacls只處理第三級文件夾?

回答

0

謝謝大家爲尋找到這與我 - 我設法讓我的劇本稍作修改的工作:

SET base=C:\testPrivate 
SET CurrentDate=%date:~-4,4%%date:~-7,2%%date:~-10,2% 
SET CurrentTIme=%time:~-11,2%%time:~-8,2%%time:~-5,2% 

FOR /d %%a in (%base%\*) do (icacls.exe %%a\* /t /reset >> %base%\InheritanceReset-%currentdate%.%currenttime%.txt) 
exit /b 

此批處理腳本正確地探索每個第3級目錄,並重置其內部每個對象的繼承,而無需修改父級(第2級)或根(第1級)文件夾。它還將其操作輸出到日期/時間標記的日誌文件。

我希望這會派上用場的其他人 - 我知道這讓我撓了一陣頭腦。

0

試試這個,取出echo輸出是否正常:

@echo off &setlocal 
pushd "c:\testPrivate" 
for /f "delims=" %%i in ('dir /a /b /s^| findstr \\.*\\.*\\.*\\') do echo icacls.exe "%%~fi" /reset /t 
popd 
+0

感謝您的反饋,但我得到了這個工作: 'SET基地= C:\ testPrivate FOR/d %%一個在(%基座%\ *)做( icacls.exe %%一\ */t/reset >>%base%\ output.txt ) exit/b' – user2363189 2013-05-09 14:00:05

+0

這很有趣,但是OK:你做到了。 – Endoro 2013-05-09 14:07:40

0

基於Endoro的代碼(去除回聲,使命令) - 但它工作在第三層文件夾。設置權限而不是將它們設置在文件本身上時是否足夠好?他們會繼承文件夾的權限嗎?

@echo off &setlocal 
pushd "c:\testPrivate" 
for /f "delims=" %%i in ('dir /ad /b /s ^| findstr \\.*\\.*\\ ^| findstr /v \\.*\\.*\\.*\\') do echo icacls.exe "%%~fi" /reset /t 
popd 
pause 

如果沒有,那麼這個工程上的第三級文件:

@echo off &setlocal 
pushd "c:\testPrivate" 
for /f "delims=" %%i in ('dir /a-d /b /s ^| findstr \\.*\\.*\\.*\\ ^| findstr /v \\.*\\.*\\.*\\.*\\') do echo icacls.exe "%%~fi" /reset /t 
popd 
pause 
+0

感謝您的反饋,但我得到了以下工作: 'SET base = C:\ testPrivate FOR/d %% a(%base%\ *)do( icacls.exe %% a \ */t/reset >>%base%\ output.txt ) exit/b' – user2363189 2013-05-09 13:58:50