基本原理:

  • 根据 系统自带的cacls.exe 是否能够访问”%SystemDrive%\System Volume Information”文件,来判断当前批处理进程是否具有管理员权限。
  • 创建 vbs 脚本到临时目录,然后使用该脚本提权执行当前 bat 文件。

下面是批处理模板,在最后追加需要执行的脚本即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
cd /d "%~dp0"
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 goto Admin
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
echo Set RequestUAC = CreateObject^("Shell.Application"^)>"%temp%\getadmin.vbs"
echo RequestUAC.ShellExecute "%~s0","","","runas",1 >>"%temp%\getadmin.vbs"
echo WScript.Quit >>"%temp%\getadmin.vbs"
"%temp%\getadmin.vbs" /f
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
exit

:Admin

rem ---------- Here is the script to be run ------------