2011-06-25 15 views
16

Tengo un archivo por lotes que realiza lo siguiente:archivo por lotes IF falla con "fue inesperado en este momento"

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

individualmente los comandos funcionan bien, pero poner juntos de esta manera en un comunicado IF consigo este error y la secuencia de comandos se detiene en sus pistas:

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

Si sólo tengo un solo comando en el estado IF entonces funciona bien.

Supongo que solo se permite una declaración entre el paréntesis IF?

Esto ocurre en Windows 2008 y Windows 2003 (with the ICACLS hotfix).

Respuesta

25

El shell parece pensar que el ) en la tercera línea de su comando es el paréntesis de cierre para el que se abre en la primera línea. Es necesario citar los argumentos que contiene paréntesis:

@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

Bloody obvio y debería haberlo sabido mejor :) Gracias. – Kev

+0

Es 2017 y la gente como yo todavía necesita esto ... ¡definitivamente no era obvio! –

0

La respuesta anterior no funcionará si necesita asignar permisos a un usuario con un espacio en su nombre (por ejemplo: "Creador propietario")

una mejor solución es utilizar una función con la llamada:

@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 

el GOTO: eOF es necesario al final de la función.

Se puede encontrar información detallada sobre las funciones en lote here.

Cuestiones relacionadas