1

我需要将文件夹复制到特定位置的 PC 列表中 - 然后将该文件夹完全控制给所有人,并将其继承到所有子文件夹和文件。我创建了一个包含 PC 列表的 txt 文件,然后将其包含在一个 bat 文件中。它执行简单的 ping 操作以查看是否继续复制 - 然后执行简单的 for/if/else 语句 - 它通常适用于其他“维护”任务......但是,在这种情况下,我无法得到icacls 命令才能正常工作。我最初使用的命令是这样的:

for /f %%a in (add_pclist.txt) do (

ping -n 2 %%a

if errorlevel 1 ( 

    echo %%a >> Test_PCFileCopyFail.txt
) else (

xcopy/e/h/i/y FOLDERNAME "\\%%a\c$\users\Public\Desktop"
icacls "\\%%a\c$\users\Public\Desktop\HMI" /grant Everyone:F /T
echo %%a >> Test_PCFileCopySuccess.txt
)
)

但是,尽管这会复制并使文件夹完全控制 - 当我查看“属性”中的“安全”选项卡时,每个人都没有勾选。我选择高级,虽然它显示所有人为完全控制,但“Apples to”设置为“仅限此文件夹” - 我希望它显示“此文件夹、子文件夹和文件”。

如果我手动运行 cmd:

icacls "\\%%a\c$\users\Public\Desktop\HMI" /grant Everyone:(OI)(CI)F /T

这行得通。但是,当我将此命令放入批处理文件时,它会出现错误

(CI was unexpected at this time.

有没有办法在没有(OI)(CI)部分的情况下执行“适用于”部分 - 否则我如何将它包含在批处理文件中而不会出现错误?我还尝试在原始 icacls 命令中包含 /inheritance:e 无济于事。

非常感谢!

4

1 回答 1

1

由于该icacls命令包含在一个code block(带括号的命令序列)中,因此)被视为关闭该命令,code block因此后面的字符被视为cmd下一个命令。

解决方案是针对escape任何)旨在用作文字而不是用作code block以插入符号关闭的特殊字符的任何内容^

)^)(会有多个)替换有问题的,以便将其)视为常规字符,而不是特殊字符。

于 2018-05-03T13:06:24.747 回答