2013-07-22 2 views
1

배치 파일에서 아래 작업을 수행하려고합니다. 다음은 배치 스크립트 - 배치 파일 아래의 오류는 어디에 있습니까?

  1. Check if a folder exists
  2. If not, create the folder.
  3. If the folder has created then provide Read permission to Everyone
  4. Else show error that the folder has not created.

배치 파일 (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) 

I 폴더가 생성되었지만 권한이 설정되지 않았 음을 알 수 있습니다. 왜이 오류가 표시되었는지 알려주실 수 있습니까? 감사 !

답변

2

그 배치가 모호한 구문을 가지고 있으며, 파일 이름에 일반 문자로 나타나는 블록과 )을 닫으려면 )의 차이를 알 수 없거나 이유 도대체 무엇이.

는 이전 캐럿으로 "보통"문자를 탈출하는 것입니다 방법을 ^) 그래서 "Everyone":(OI)(CI)R))R입니다 따라서 블록을 닫고해야 다음과 같은 것을 하지"Everyone":(OI^)(CI^)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 
)