我正在尝试强制用户使用管理权限运行脚本:
@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 session
和errorlevel
行检查权限,这是有效的。奇怪的是,无论为choice
输入什么,它的行为就好像它从未被初始化一样。
if块内部运行的代码本身运行正常,所以我怀疑这个问题与我如何检查权限有关。
有人可以解释这种行为,以及任何修复?
答案 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