2013-05-08 145 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