自动以管理员身份运行bat文件

有些.bat格式的文件,直接运行无效,右键-以管理员身份运行后可以。有什么办法可以将它设置为双击时直接自动以管理员身份运行?

@echo off
title 获取管理员权限
mode con cols=100 lines=20
color 3f

:: 开始获取管理员权限
setlocal
set uac=~uac_permission_tmp_%random%
md "%SystemRoot%\system32\%uac%" 2>nul
if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
    echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
    echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
    echo WScript.Quit >>"%temp%\%uac%.vbs"
    "%temp%\%uac%.vbs" /f
    del /f /q "%temp%\%uac%.vbs" & exit )
endlocal
:: 完成获取,下面可以开始写你自己的代码了

echo.
echo 原理:先尝试在系统目录下临时新建一个文件夹,若已获取管理员权限或是运行在XP等不需要管理员权限的
echo       老系统时,是可以新建成功的,此时只需删除这个临时新建的文件夹就好了,否则通过创建一个临时
echo       vbs脚本获取管理员权限,然后再删除这个临时vbs脚本文件。
echo.
echo 提示:当获取管理员目录后,你的批处理运行目录会发生变化,为保证目录准确,
echo       可通过 cd 切换目录,例“cd /d %%~dp0”切换回批处理所在目录
echo.
echo 当前运行目录: %cd%\
echo 批处理所在目录:%~dp0
echo.
echo 例:切换回批处理所在目录
echo cd /d %%~dp0
echo.

cd /d %~dp0

echo 当前运行目录: %cd%\
echo 批处理所在目录:%~dp0	

pause
exit

判断当前脚本是否是管理员启动:fltmc>nul&&(echo Yes)||(echo No)

解释一下:windows下的命令fltmc只有管理员才可以执行,管理员执行的退出码是0,非管理员执行退出码是非0,

为什么用fltmc而不用其他的命令?因为fltmc命令是满足需求而且在不同windows版本(xp,win7,win10,win server,..)下普遍存在的命令。

‘&&’ 和’||’是BAT的组合命令符号,用于连接两个或多个BAT命令。组合命令’cmd1&&cmd2’当cmd1失败时cmd2不会执行。组合命令’cmd1||cmd2’只有当cmd1失败时,才会执行cmd2。

set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.batemp
( echo "BAT Test UAC in Temp" >%TempFile_Name% ) 1>nul 2>nul
if exist %TempFile_Name% (
ECHO Got Administrator Privilege
) else (
ECHO Cannot get Administrator Privilege...
ECHO It will popup the UAC dialog, please click [Yes] to continue.
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
ECHO UAC.ShellExecute "cmd.exe", "/k %~s0 %*", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /b 2
)

稍微解释一下:
1,TempFile_Name是一个系统目录的临时文件名称,如果你有写的权限,那么认为具备Administrator用户权限了;
2,创建一个临时vbs文件:"%temp%\getadmin.vbs"
3,把两行代码写入这个文件:
4,然后执行这个vbs:"%temp%\getadmin.vbs"

%~s0 :当前脚本的全路径。
%* :当前脚本的所有参数列表。
"runas", 1 :表示以管理员身份运行。

转自知乎 https://www.zhihu.com/question/34541107

原文链接:,转发请注明来源!
评论已关闭。