在批处理文件中使用空格?

时间:2014-01-23 22:14:49

标签: windows batch-file scripting

我需要运行批处理文件来设置许多文件夹的权限。

我们有以下文件夹结构

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上运行的。

2 个答案:

答案 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之后,最后两个将变得多余时。