检测是否以管理员运行bat的两种方法

我用的是win7系统, 因为不喜欢一些集成包所以一直是手工配置开发环境, 然后写一个web.bat来管理tomcat mysql apache psql等服务.

但是碰到一个问题就是需要重启某个服务, 比如mysql, 这是很费劲的, 因为我是以普通用户跑win7的而不是administrator, 之前的折中方案是写一个su.bat,用处是以admin身份启动cmd然后运行web.bat,但是总感觉还是不够方便,就想着能不能检测到不是管理员身份就以管理员运行自己呢

好了,直接贴代码吧。

第一种方法是检测title里是否管理员关键字,看图。
is_admin.jpg

@echo off setlocal EnableDELAYEDEXPANSION set UAC=0 For /f "usebackq delims==" %%i In (`tasklist /fi "WINDOWTITLE eq 管理员: BAT"`) Do ( set "cmdline=%%i" set "cmdline=!cmdline:~0,7!" if "!cmdline!" == "cmd.exe" ( set UAC=1 ) ) if "%UAC%" == "1" ( goto select ) else ( title 需要以管理员权限运行此程序,请输入管理员密码。 runas /user:administrator web.bat exit ) pause

因为是要写到web.bat内容的前面的,这个时候如果右键--管理员运行,会检测失败,于是抛弃,看第二种。第二种是尝试向系统盘的system32里写入文件,以成功和失败判断
@echo off set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.batemp echo %TempFile_Name% ( echo "BAT Test UAC in Temp" >%TempFile_Name% ) 1>nul 2>nul if exist %TempFile_Name% ( del %TempFile_Name% 1>nul 2>nul goto select ) else ( cls title 需要以管理员权限运行此程序,请输入管理员密码。 runas /user:administrator web.bat exit ) pause

参考文档:
http://tieba.baidu.com/f?kz=1173336012
http://topic.csdn.net/u/20110812/16/0127cc8e-06eb-41fd-92a7-751d72139807.html

标签: bat, cmd

添加新评论