2011-06-25 32 views
16

Tôi có một tập tin batch để thực hiện như sau:Viết tập tin bó NẾU tuyên bố không thành công với "đã bất ngờ vào thời điểm này"

@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) 
) 

riêng các lệnh làm việc tốt nhưng đặt lại với nhau như thế này trong một tuyên bố IF tôi có được điều này lỗi và tập lệnh dừng trong các tuyến đường của nó:

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

Nếu tôi chỉ có một lệnh duy nhất trong tuyên bố IF thì nó hoạt động tốt.

Tôi đoán rằng bạn chỉ được phép có một tuyên bố giữa dấu ngoặc đơn IF?

Điều này xảy ra trên Windows 2008 và Windows 2003 (with the ICACLS hotfix).

Trả lời

25

Vỏ dường như nghĩ rằng ) trong dòng thứ ba của lệnh của bạn là dấu ngoặc đơn đóng cho dấu mở đầu trong dòng đầu tiên. Bạn cần phải trích dẫn các đối số có chứa dấu ngoặc:

@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

Đẫm máu rõ ràng và tôi nên biết rõ hơn :) Cảm ơn. – Kev

+0

Đó là năm 2017 và những người như tôi vẫn cần điều này .. chắc chắn là không rõ ràng !! –

0

Câu trả lời ở trên sẽ không hoạt động nếu bạn cần phải gán quyền cho một người dùng với một không gian trong tên của họ (EG: "CREATOR OWNER")

Giải pháp tốt hơn là sử dụng chức năng có cuộc gọi:

@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 

Yêu cầu GOTO: eOF ở cuối hàm.

Thông tin chi tiết về các chức năng theo lô có thể được tìm thấy here.

Các vấn đề liên quan