我正试图在批处理文件中执行以下操作。
- 检查文件夹是否存在
- 如果没有,请创建文件夹
- 如果文件夹已创建,则向Everyone提供读取权限
- 否则显示文件夹未创建的错误
下面是批处理文件(test.bat):
set FolderPath="%TEMP%Data"
IF NOT EXIST %FolderPath% (MKDIR %FolderPath%)
IF EXIST %FolderPath% (icacls %FolderPath% /grant "Everyone":(OI)(CI)R)
ELSE (
ECHO ERROR: The folder %FolderPath% can not be found
GOTO Finish
)
:Finish
但是在从cmd执行这个test.bat文件时,我得到了以下错误:
IF NOT EXIST "C:UsersTestAppDataLocalTempData" (MKDIR "C:UsersTestAppDataLocalTempData" )
(CI)R) was unexpected at this time.
IF EXIST "C:UsersTestAppDataLocalTempData" (
icacls "C:UsersTestAppDataLocalTempData" /grant "Everyone":(OI)(CI)R)
我可以看到文件夹已经创建,但没有权限集。你能告诉我为什么会出现这个错误吗?谢谢
WHY是批处理具有不明确的语法,并且无法区分关闭块的)
和在文件名或其他文件中作为普通字符出现的)
之间的区别。
HOW是用前面的插入符号^)
转义"普通"字符,使"Everyone":(OI)(CI)R)
变成"Everyone":(OI^)(CI^)R)
但是请注意,R
后面的)
是关闭块,因此NOT应该有一个插入符号但是这将引入进一步的语法错误-ELSE必须与前面的)
在同一物理线上,因此您需要
IF EXIST %FolderPath% (icacls %FolderPath% /grant "Everyone":(OI^)(CI^)R
) ELSE (
试试这个:
@ECHO OFF &SETLOCAL
SET "folderpath=test"
IF EXIST "%FolderPath%" icacls %FolderPath% /grant "Everyone":(OI)(CI)R
IF NOT EXIST "%FolderPath%" (
ECHO ERROR: The folder %FolderPath% can not be found
GOTO Finish
)