我有一个批处理文件,可执行以下操作:
@IF EXIST "C:\Program Files\MyAppFolder" (
icacls "C:\Program Files\MyAppFolder" /inheritance:r
icacls "C:\Program Files\MyAppFolder" /GRANT SYSTEM:(CI)(OI)(F)
icacls "C:\Program Files\MyAppFolder" /GRANT Administrators:(CI)(OI)(F)
)
单独地命令工作正常但在IF
语句中这样组合在一起我收到此错误并且脚本停在其轨道上:
(OI)(F) was unexpected at this time.
如果我在IF
语句中只有一个命令,那么它可以正常工作。
我猜你只允许IF
括号之间的一个陈述?
这发生在Windows 2008和Windows 2003(with the ICACLS hotfix)上。
答案 0 :(得分:26)
shell似乎认为命令第三行中的)
是第一行中打开的括号的右括号。您需要引用包含括号的参数:
@IF EXIST "C:\Program Files\MyAppFolder" (
icacls "C:\Program Files\MyAppFolder" /inheritance:r
icacls "C:\Program Files\MyAppFolder" /GRANT "SYSTEM:(CI)(OI)(F)"
icacls "C:\Program Files\MyAppFolder" /GRANT "Administrators:(CI)(OI)(F)"
)
答案 1 :(得分:0)
如果您需要为名称中有空格的用户分配权限,上述答案将无效(EG:" CREATOR OWNER")
更好的解决方案是使用带调用的函数:
@ECHO OFF
IF EXIST "C:\Program Files\MyAppFolder" (
CALL:Permissions
)
GOTO:eof
:Permissions
icacls "C:\Program Files\MyAppFolder" /inheritance:r
icacls "C:\Program Files\MyAppFolder" /GRANT SYSTEM:(CI)(OI)(F)
icacls "C:\Program Files\MyAppFolder" /GRANT Administrators:(CI)(OI)(F)
GOTO:eof
GOTO:功能结束时需要eof。
可以找到批量功能的详细信息here。