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

Windows 在批处理文件中使用空格?,windows,batch-file,scripting,Windows,Batch File,Scripting,我需要运行批处理文件来设置对多个文件夹的权限 我们有以下文件夹结构 Folder1 Folder1\Client1 Folder1\Client2 Folder1\Client3然后在每个客户端文件夹中,我们有几个子文件夹,例如Folder1\Client1\SubFolder1 Folder1\Client1\SubFolder2 Folder1\Client1\SubFolder3 我需要重置上面示例中所有子文件夹的权限,并在名为permissions.bat的文件中包含以下代码 for /

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

我们有以下文件夹结构

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\
紧跟其后的是系统找不到指定文件的错误。有什么想法吗


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

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
我会用

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
和最后两个之后)将变得多余