我正在尝试确定脚本是否在Win7上使用管理员权限运行,但是在执行“net”命令后,似乎没有设置errorlevel ...
这是(简化)我的代码:
net session >null 2>$1
if %errorLevel% == 0 (
echo This seems to be mighty ADMIN...
) else (
echo Poor sod... no Admin, no glory - errorLevel: %errorLevel%
)
@SETLOCAL
@set TSTHOME=%~dp0
@set TSTNAME=%~n0
set SAL=NO
set SCL=NO
:VAL_PARM
if .%1 == . @goto :VAL_PARM_END
if /i %1 == SAL (
net session >null 2>$1
if %errorLevel% == 0 (
set SAL=YES
) else (
echo Option "SAL" requires Administrator priviliges (run "as Admin" or from an elevated command prompt)
goto :EOF
)
) else (
if /i %1 == SCL (
set SCL=YES
) else (
echo off
echo Invalid argument "%1"; correct syntax: %TSTNAME% [SAL] [SCL]
echo where: SAL: save agent logs of each command
echo SCL: save client logs of each command
echo NOTE: "SAL" requires "Administrator" privileges
goto :EOF
)
)
shift
goto :VAL_PARM
:VAL_PARM_END
但是当我从常规命令提示符运行时,这是输出:
C:\ MyDir> isAdmin sal
C:\ MyDir> net session 1> null 2> $ 1
C:\ MyDir>如果2 == 0(回声这似乎是强大的ADMIN ...)else(回声可怜......没有管理员,没有荣耀 - 错误级别:2)
可怜的草皮......没有管理员,没有荣耀 - 错误级别:2
C:MyDir>设置SAL = NO
C:\ MyDir>设置SCL = NO
C:\ MyDir> if .sal ==。
C:\ MyDir> if / I sal == SAL(
净会话1> null 2> $ 1
if 0 == 0(设置SAL = YES)
否则(echo选项“SAL”需要管理员权限(以“管理员”身份运行或从提升的命令提示符运行)
转到:EOF
)
为什么天堂的缘故是第二个“网络会话”没有设置errorLevel ???
答案 0 :(得分:0)
不要比较那样的错误级别,因为变量将在 if
块之前扩展甚至执行,从而在块之前保留其值。请改用以下内容:
if not errorlevel 1 ...
或使用延迟扩展。您可以在help set
。