我需要运行批处理文件来设置许多文件夹的权限。
我们有以下文件夹结构
Folder1 Folder1 \ Client1 Folder1 \ Client2 Folder1 \ Client3然后在每个客户端文件夹中我们有几个子文件夹,例如Folder1 \ Client1 \ SubFolder1 Folder1 \ Client1 \ SubFolder2 Folder1 \ Client1 \ SubFolder3
我需要重置上面示例中所有子文件夹的权限,并在名为permissions.bat的文件中包含以下代码
for /f %%g in ('dir "f:\temp\" /ad /b') do for /f %%a in ('dir %%~fg /ad /b') do icacls
"%%~fg\%%a" /grant:r domain\mygroup:(OI)(CI)M
这很好但是对于包含空格的客户端和子文件夹,它不起作用。例如
Folder1\Client1\Sub Folder 1
将显示为
Folder1\Client1\Sub\
紧跟System后无法找到指定文件的错误。有什么想法吗?
顺便说一句,这是在2003 Server上运行的。
答案 0 :(得分:2)
FOR循环的默认分隔符是空格和制表符。您需要将分隔符指定为仅反斜杠。例如:
for /f "tokens=* delims=\" %%g in ('dir "f:\temp\" /ad /b') do ...
有关详细信息,请参阅此处:Tokens and Delims
脚本还有一些其他问题,但我相信以下内容对您有用:
SET folder=F:\temp
for /f "tokens=* delims=\" %%g in ('dir "%folder%\" /ad /b') do for /f %%a in ('dir "%folder%\%%g" /ad /b') do icacls "%folder%\%%g\%%a" /grant:r domain\mygroup:(OI)(CI)M
答案 1 :(得分:1)
我用
for /f "delims=" %%g in ('dir "f:\temp\" /ad /b') do (
for /f "delims=" %%a in ('dir %%~fg /ad /b') do (
icacls "%%~fg\%%a" /grant:r domain\mygroup:(OI)(CI)M
)
)
"delims="
禁用分隔符,因此将整个dir
行应用于元变量(%% g,%% a),而不考虑空格。
为了便于阅读,我已将命令分解为多行。如果您愿意,可以将它全部放在一行上,当(在每个do
之后,最后两个)将变得多余时。