2013-05-08 2 views
0

Это своего рода интересная проблема, поэтому, пожалуйста, медведь со мной здесь:Пакетный скрипт для обеспечения Наследование на 3-й папки уровня

У меня есть три уровня вложенных папок, используемых для синхронизации файлов для конечных пользователей устройств - на на первом уровне у администратора есть разрешения, на втором уровне конечные пользователи имеют (явно & индивидуальных) разрешений, а на третьем уровне есть контент (файлы и обычно больше папок).

Проблема возникает, когда (иногда) содержимое, перемещаемое на третий уровень, не наследует разрешения из папки над ним, поэтому наши пользователи заканчивают тем, что в своих каталогах они не имеют прав (и поэтому , невозможно синхронизировать данные).

Чтобы исправить это, я пытаюсь написать пакетный скрипт (который будет выполняться по ежедневному расписанию), который копается в папках третьего уровня и сбрасывает флаг наследования в списках 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 

Этот командный скрипт правильно исследует каждый каталог третьего уровня и сбрасывает наследование на каждый объект внутри него, без изменения родительского (2-го уровня) или корневого (1-го уровня) папок. Он также выводит свои действия на файл журнала с отметкой даты/времени.

Я надеюсь, что это пригодится кому-то другому - я знаю, что это немного почесал мне голову.

0

Попробуйте и удалить echo если выход OK:

@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

+0

Это интересно, но ОК: вы сделали это. – Endoro

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 in (% base% \ *) do ( icacls.exe %% a \ */t/reset >>% base% \ output.txt ) выход/b' – user2363189

Смежные вопросы