直接上示例代码:
@echo off
:: 检查是否以管理员身份运行
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 请求管理员权限...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: 在这里添加你想要执行的命令,例如启动记事本
start notepad.exe
代码的详细解释如下:
@echo off
:关闭命令回显,使脚本运行时不显示执行的命令。:: 检查是否以管理员身份运行
:注释,说明接下来的代码是用来检查权限的。>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
:使用cacls.exe
命令检查当前用户是否有访问系统目录的权限。>nul 2>&1
表示将标准输出和错误输出都重定向到空设备(不显示在屏幕上)。if '%errorlevel%' NEQ '0'
:判断上一条命令的返回值(%errorlevel%
)是否不等于0。如果不等于0,说明没有管理员权限。( echo 请求管理员权限... & goto UACPrompt )
:如果没有管理员权限,输出提示信息并跳转到UACPrompt
标签。else ( goto gotAdmin )
:如果有管理员权限,跳转到gotAdmin
标签。:UACPrompt
:定义一个名为UACPrompt
的标签,用于请求管理员权限。echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
:创建一个VBScript文件,用于请求管理员权限。echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
:向VBScript文件中添加一行代码,用于以管理员身份重新运行脚本。"%temp%\getadmin.vbs"
:执行刚刚创建的VBScript文件。exit /B
:退出批处理脚本。:gotAdmin
:定义一个名为gotAdmin
的标签,表示已经获得管理员权限。if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
:删除临时创建的VBScript文件。pushd "%CD%"
:保存当前目录。CD /D "%~dp0"
:切换到脚本所在的目录。start notepad.exe
:启动记事本程序。在这里可以替换为你想要执行的其他命令。