【问题标题】:Batch Script - where is the error in below Batch file?批处理脚本 - 下面批处理文件中的错误在哪里?
【发布时间】:2013-07-22 22:37:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: windows file batch-file


    【解决方案1】:

    WHY 是批处理具有模棱两可的语法,并且无法区分 ) 关闭块和 ) 在文件名或其他任何内容中作为普通字符出现。

    HOW 是用前面的插入符号^) 转义“普通”字符,因此"Everyone":(OI)(CI)R) 变为"Everyone":(OI^)(CI^)R)

    但是请注意,R 后面的 )关闭块,因此应该 有一个插入符号 BUT 这将引入进一步的语法错误 - ELSE 必须与前面的 ) 位于同一物理行,因此您需要

    IF EXIST %FolderPath% (icacls %FolderPath% /grant "Everyone":(OI^)(CI^)R
    ) ELSE (
    

    【讨论】:

      【解决方案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
      )
      

      【讨论】:

        猜你喜欢
        • 2014-05-21
        • 2017-01-07
        • 2010-11-12
        • 1970-01-01
        • 1970-01-01
        • 2017-10-26
        • 2013-05-16
        • 1970-01-01
        • 2018-04-21
        相关资源
        最近更新 更多