2011-06-25 10 views
16

で失敗した場合、私は次のことを行いバッチファイルを持っている:バッチファイル文は「現時点では予想外だった」

@IF EXIST "C:\Program Files\MyAppFolder" (
    icacls "C:\Program Files\MyAppFolder" /inheritance:r 
    icacls "C:\Program Files\MyAppFolder" /GRANT SYSTEM:(CI)(OI)(F) 
    icacls "C:\Program Files\MyAppFolder" /GRANT Administrators:(CI)(OI)(F) 
) 

個別のコマンドが正常に動作しますがIF声明の中で次のように一緒に入れて、私はこれを取得エラー、スクリプトがそのトラックに停止します。

(OI)(F) was unexpected at this time.

私はちょうどそれが正常に動作し、その後IF文で単一のコマンドを使用している場合。

IFかっこの間に1つのステートメントのみが許可されていると思いますか?

これは、Windows 2008およびWindows 2003(with the ICACLS hotfix)で発生します。

答えて

25

シェルは、コマンドの3行目の)が1行目で開いているものの閉じ括弧であると考えているようです。あなたは括弧を含む引数を引用する必要があります。

@IF EXIST "C:\Program Files\MyAppFolder" (
    icacls "C:\Program Files\MyAppFolder" /inheritance:r 
    icacls "C:\Program Files\MyAppFolder" /GRANT "SYSTEM:(CI)(OI)(F)" 
    icacls "C:\Program Files\MyAppFolder" /GRANT "Administrators:(CI)(OI)(F)" 
) 
+1

血まみれの明白と私はよく知っていたはずです:)ありがとう。 – Kev

+0

それは2017年で、私のような人々はまだこれが必要です..それは間違いなく明らかでした! –

0

あなたは自分の名前(EG:「CREATOR所有者」)のスペースでユーザーに権限を割り当てる必要がある場合は、上記の答えは動作しません

より良い解決策は、電話での機能を使用することです:

@ECHO OFF 

IF EXIST "C:\Program Files\MyAppFolder" (
    CALL:Permissions 
) 

GOTO:eof 

:Permissions 
    icacls "C:\Program Files\MyAppFolder" /inheritance:r 
    icacls "C:\Program Files\MyAppFolder" /GRANT SYSTEM:(CI)(OI)(F) 
    icacls "C:\Program Files\MyAppFolder" /GRANT Administrators:(CI)(OI)(F) 
    GOTO:eof 

GOTO:関数の最後にeofが必要です。

バッチでの機能の詳細情報はhereです。

関連する問題