1

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

  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)

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

4

2 回答 2

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
)
于 2013-07-22T22:56:12.683 回答
2

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

如何用前面的插入符号转义“普通”字符,这样^)"Everyone":(OI)(CI)R)变成了"Everyone":(OI^)(CI^)R)

但是请注意,)以下R关闭块,因此不应该插入符号但是这会引入进一步的语法错误 - ELSE必须与前面的物理行相同,)因此您需要

IF EXIST %FolderPath% (icacls %FolderPath% /grant "Everyone":(OI^)(CI^)R
) ELSE (
于 2013-07-23T01:14:01.010 回答