我正在尝试在批处理文件中执行以下操作。
- 检查文件夹是否存在
- 如果没有,请创建文件夹。
- 如果文件夹已创建,则向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:\Users\Test\AppData\Local\Temp\Data" (MKDIR "C:\Users\Test\AppData\Local\Temp\Data" )
(CI)R) was unexpected at this time.
IF EXIST "C:\Users\Test\AppData\Local\Temp\Data" (
icacls "C:\Users\Test\AppData\Local\Temp\Data" /grant "Everyone":(OI)(CI)R)
我可以看到该文件夹已创建,但未设置权限。你能告诉我为什么会出现这个错误吗?谢谢!
答案 0 :(得分:2)
试试这个:
@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
)
答案 1 :(得分:2)
为什么该批处理具有模糊的语法,并且无法区分关闭块的)
与作为普通字符出现的)
之间的区别文件名或其他。
HOW 是使用前一个插入符^)
来转义“普通”字符,以便"Everyone":(OI)(CI)R)
成为"Everyone":(OI^)(CI^)R)
但请注意,)
之后的R
关闭了块,因此 NOT 的插入符号 BUT 这会引入进一步的语法错误 - ELSE 必须与前面的)
位于同一物理行上,因此您需要
IF EXIST %FolderPath% (icacls %FolderPath% /grant "Everyone":(OI^)(CI^)R
) ELSE (