在batch file中使用空格?

我需要运行batch file来设置许多文件夹的权限。

我们有以下文件夹结构

然后在每个客户端文件夹中,我们有几个子文件夹,例如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\ 

紧跟着系统找不到指定的文件错误。 有任何想法吗?

顺便说一下,这是在2003服务器上运行。

Solutions Collecting From Web of "在batch file中使用空格?"

我会用

 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和最后两个之后都会变成多余的。

FOR循环的默认分隔符是空格和制表符。 您需要指定分隔符只是反斜杠。 例如:

 for /f "tokens=* delims=\" %%g in ('dir "f:\temp\" /ad /b') do ... 

在这里看到更多的信息: 令牌和代理

这个脚本还有一些其他的问题,但是我相信下面的内容会适合你:

 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