检查管理员权限后,SET / P不起作用

时间:2018-04-05 10:49:46

标签: batch-file

我正在尝试强制用户使用管理权限运行脚本:

@echo off
net session >nul 2>&1
if %errorlevel% == 0 (
    echo Success: Administrative permissions confirmed.
    echo.
    echo Please Choose:
    echo 1. Enable
    echo 2. Disable
    echo 3. Exit

    set /p choice="> "
    echo Choice: "%choice%"
) else (
    echo Failure: Please run as administrator
)
pause

net sessionerrorlevel行检查权限,这是有效的。奇怪的是,无论为choice输入什么,它的行为就好像它从未被初始化一样。

if块内部运行的代码本身运行正常,所以我怀疑这个问题与我如何检查权限有关。

有人可以解释这种行为,以及任何修复?

2 个答案:

答案 0 :(得分:0)

您需要delayed expansion或通过稍微重新组织代码来避免它,例如:

@echo off
net session >nul 2>&1
if %errorlevel% == 1 (
  echo Failure: Please run as administrator
  exit 1
)
echo Success: Administrative permissions confirmed.
etc.

答案 1 :(得分:0)

问题是因为您在If块内设置了一个变量,而没有延迟变量扩展。

但是,您根本不需要if块,也不需要为选择设置变量。

以下方法使用||,这实际上意味着如果上一个命令产生了错误',则用Set /P替换Choice命令,并通过以下方法使用定时暂停Timeout命令:

@Echo Off
Net Session >Nul 2>&1 || (
    Echo Failure: Please run as administrator
    Timeout 3 /NoBreak >Nul
    Exit /B
)
Echo Success: Administrative permissions confirmed.
Echo=
Echo 1. Enable
Echo 2. Disable
Echo 3. Exit
Choice /C 123 /M "Please Choose"
If ErrorLevel 3 Exit /B
If ErrorLevel 2 GoTo Disable
Echo Enabling
Timeout 3 /NoBreak >Nul
Exit /B
:Disable
Echo Disabling
Timeout 3 /NoBreak >Nul
Exit /B