批处理脚本 - 下面的批处理文件中的错误在哪里?

时间:2013-07-22 22:37:02

标签: windows file batch-file

我正在尝试在批处理文件中执行以下操作。

  
      
  1. 检查文件夹是否存在
  2.   
  3. 如果没有,请创建文件夹。
  4.   
  5. 如果文件夹已创建,则向Everyone提供“读取”权限
  6.   
  7. 否则显示文件夹尚未创建的错误。
  8.   

以下是批处理文件(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)

我可以看到该文件夹​​已创建,但未设置权限。你能告诉我为什么会出现这个错误吗?谢谢!

2 个答案:

答案 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 (