2017-05-09 124 views
0
@echo off 
(for %%a in ("C:\Test1","C:\Test2") do (
    echo Fixing Permission issue of %%a 
    ICACLS %%a | findstr /i "(I)" 
    if %ERRORLEVEL% EQU 1 ( 
     echo/ 
     echo Removing Inheritance from %%a 
     ICACLS %%a /inheritance:d 
    ) 
    ICACLS %%a | findstr /i "User_1:(OI)(CI)(R)" 
    if %ERRORLEVEL% NEQ 0 ( 
     echo/ 
     Echo Updating Permission of User_1 
     ICACLS %%a /remove User_1 
     ICACLS %%a /grant:r "User_1:(OI)(CI)(R)" 
    ) 
) 

我需要删除继承(如果存在)(我不想每次都运行删除继承),然后应用/删除某些权限。但我认为If else语句的%ERRORLEVEL%不能很好地工作。有人可以帮助我。Windows中的ACL权限

+1

使用'@回响与SETLOCAL EnableDelayedExpansion'然后用'!ERRORLEVEL!',而不是'%ERRORLEVEL'%,见https://ss64.com/nt/delayedexpansion.html – JosefZ

回答

1

在代码块内执行任何命令之前进行扩展。基本上,放在一组括号内的任何东西。

由于ERRORLEVEL变量在ICACLS执行命令之前已经展开,的ICACLS结果不影响如果命令的表达。

幸运的是,错误级别变量具有特殊功能。如果命令没有扩展它,它可以被使用。

:: This is true when %errorlevel% >= 1 
if errorlevel 1 (

:: This is true when %errorlevel% <= 0 
if not errorlevel 1 (
+0

所以,你是并说每次使用时都会重新评估“ERRORLEVEL”。那是对的吗? – lit

+0

如果你运行下面的命令,它会输出*失败*和*成功* :(如果errorlevel 1 echo fail&type nul& *。 – treintje