在修改注册表的时候会需要使用管理员权限,以下bat都是基于创建并调用vbs来弹出uac获取管理员权限
尝试一:
1 %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd .exe","/c %~s0 ::","","runas",1 )(window.close)&&exit
这一行代码会重新以管理员运行当前的 bat 脚本文件, 注意这行代码开始的 “%1” 是接收参数用的.双击运行 “%1” 默认初始值为空, 该行代码执行, 即会执行" start … ", execute部分为提权执行当前 bat 文件, 并会传入 “::” 这个注释符号为参数则这行代码变成了注释 ":: start … ", 不会执行了, 转而接着执行下面的 bat 命令, exit 的用处就很明显了吧~这样放在第一行, 下面的所有命令就都是管理员权限运行了.
尝试二:
1 2 3 4 If not "%~1 "=="H" ( mshta vbscript:"<script language=vbs>Set UAC=CreateObject(""Shell.Application""):UAC.ShellExecute ""%~s0"", ""H"", """", ""runas"", 1 :window,close</script>" exit )
尝试三:
1 2 3 4 5 6 7 8 9 net session >nul 2 >&1 if not "%errorLevel% " == "0 " (echo Set UAC = CreateObject^("Shell.Application"^) > "%temp% \getadmin.vbs"echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp% \getadmin.vbs""%temp% \getadmin.vbs" exit /b 2 )
%~s0 :当前脚本的全路径.
%* :当前脚本的所有参数列表.
“runas”,1 :表示以管理员身份运行.
附,将vbs写入到指定的文件中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @echo off pushd "%temp% ":cycle set filename=0 set /p filename=请将批处理文件拖放至此处(退出直接回车):if %filename% == 0 exit echo :::::::::::::::::::::::::::::::自动触发UAC::::::::::::::::::::::::::::::>part1.txtecho @pushd "%%t emp%%" >>part1.txtecho @echo .^>%%s ystemroot%%\ testfile.tmp>>part1.txtecho @if exist %%s ystemroot%%\ testfile.tmp goto StartWithAdmin>>part1.txtecho @echo Set UAC = CreateObject^^^("Shell.Application"^^^)^>getadm.vbs>>part1.txtecho @echo UAC.ShellExecute "%%~ 0 ", "%%* ", "", "runas", 1 ^>^>getadm.vbs>>part1.txtecho @getadm.vbs>>part1.txtecho @goto :eof>>part1.txtecho :StartWithAdmin>>part1.txtecho @del %%s ystemroot%%\ testfile.tmp>>part1.txtecho @if exist getadm.vbs del getadm.vbs>>part1.txtecho @pushd "%%~ dp0">>part1.txtecho :::::::::::::::::::::::::::::auto touch UAC:::::::::::::::::::::::::::::>>part1.txtecho .>>part1.txtcopy %filename% part2.txtcopy /b part1.txt + /b part2.txt /b %filename% del part1.txtdel part2.txtstart notepad %filename% goto cycle
be yourself, everyone else is already taken.