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

标签 windows batch-file scripting

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

我们有以下文件夹结构

Folder1、Folder1\Client1、Folder1\Client2、Folder1\Client3 然后在每个客户端文件夹中,我们有几个子文件夹,例如文件夹1\客户端1\子文件夹1 文件夹1\客户端1\子文件夹2 文件夹1\客户端1\子文件夹3

我需要重置上例中所有子文件夹的权限,并在名为 requests.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 ...

请参阅此处了解更多信息: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

关于windows - 在批处理文件中使用空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21320450/

相关文章:

Bash - 读取变量和直接分配变量有什么区别?

c++ - 将函数代码与预处理器指令混合是一种不好的做法吗?

c++ - Direct3D c++ api 如何更新顶点缓冲区?

windows - 如何在 Delphi 中获取 Windows 上的完全限定域名

batch-file - 在 ImageMagick 中计算颜色

batch-file - 移动 : The filename or extension is too long

git - 我们如何捕获在 bitbucket 云中创建的 pull 请求

需要 Linux 脚本帮助

windows - pushd 在延迟扩展的批处理文件中不起作用

windows - .bat 文件中的 Sed 等价物