很多用了Win10版本系统的人都会发现,Windows对程序的运行权限是控制得更加严格了,即使你将UAC控制放至最低,如果没有特别赋予外来程序管理员运行权限的话,很多程序都会运行出错,包括很多用于系统维护的批处理程序由于运行权限不够都会导致出错,最简单的方法莫过于用右键点击程序,然后选择“以管理员身份运行”,对于那些需要经常使用的程序,我们可以进入程序的属性里面勾选上“以管理员身份运行”,这样每次点击它都会直接以管理员身份运行了。以上这些都是对单个程序的临时解决措施。那么对于众多的批处理程序,每次都用右键觉得很麻烦,又不可能到每个程序的属性里面去设置一下,效率低下,那有没有办法让批处理程序能够自动获取管理员运行权限呢,让其直接双击即可实现正常运行,答案当然是有的。下面是我从网上找到的几种提升批处理运行权限的方法,另外也有一些本人自己摸索出来的方法。

方法1:借用VBS脚本
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

方法2:借用VBS脚本
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B

方法3:借用VBS脚本
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del /f /q "%temp%\getadmin.vbs" >nul
exit /B

方法4:借用第三方程序
nircmd elevate cmd /c "%0"
exit /B

方法5:runas命令
runas /noprofile /user:Administrator "%0"
exit /B

以上是批处理获取管理员权限的5种方法,只要把这几个命令放进批处理优先执行即可,当然还要加上判断是否已经获取管理员权限的语句,否则批处理就会无限循环下去。判断批处理是否已获取管理员权限的方法,网上用的最多的是下面这句命令:

以方法1为例:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
:UACAdmin
echo 已获取管理员权限

用cacls命令来判断管理员权限固然不错,但经过实践我发现cacls返回的errorlevel值不够稳定,经常会变换出其他不可预知的错误码,造成判断有误,导致批处理进入死循环。当然也有人采用能否往系统目录(比如system32)写入文件的方法来判断,我觉得这些都不够好,后来我发现使用bcdedit命令来判断比较准确,一般情况下它只会返回两个错误码0和1,很少见到有其他值出现,目前它是我觉得用来判断管理员权限最好的方法。

前3种方法是使用了VBS脚本,方法1最简洁,一行代码就搞定了,但我发现Win10系统似乎不支持短文件名,一旦文件路径出现空格,该命令就会出错;方法2也不赖,只有两行代码,在Win10系统能稳定运行;方法3比较复杂,还会产生临时文件,但也能在Win10系统稳定运行;第4种方法使用了第三方程序,不会产生临时文件,代码也简单,但你得先下载nircmd.exe这个工具;第5种方法采用了系统自带的命令runas来实现,理论上是没问题的,但实际上比较难实现,首先要求Administrator管理员账户必须已经启用,其次还必须设置有管理员密码,否则都会得到拒绝的提示。

以上5种方法都可以提升批处理的运行权限,可根据具体情况选择最合适的方法,我比较喜欢方法2,代码简洁,运行稳定,不会产生临时文件,其次方法4也不错。如果您有更好的批处理提权方法,也可以跟大家一起分享!共同进步!

附:批处理获取管理员权限完整代码

@echo off
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限
pause

转载于:https://www.cnblogs.com/conducer/p/10591614.html

浅谈批处理获取管理员运行权限的几种方法相关推荐

  1. android获取存储设备根目录,浅谈android获取存储目录(路径)的几种方式和注意事项...

    通常, 我们创建文件/目录, 或者存储图片什么的, 我们都需要拿到手机的存储路径, 现在我们就来看一下获取手机存储路径的几种方式(作为工具类方法调用即可): 第一种: 获取 /storage/emul ...

  2. linux通过java获取root权限_通过可写文件获取Linux root权限的5种方法

    Linux系统中,全部都是以文件形式存在的,包括目录.设备都是有权限的,共有读.写.可执行三种.管理员为文件设置好权限后,应该要考虑哪些Linux用户会被允许和限制上述的三个权限. 通过可写脚本进行r ...

  3. linux中root权限找tmp路径,通过可写文件获取 Linux root 权限的 5 种方法-tmp文件

    Linux系统中,全部都是以文件形式存在的,包括目录.设备都是有权限的,共有读.写.可执行三种.管理员为文件设置好权限后,应该要考虑哪些Linux用户会被允许和限制上述的三个权限. 通过可写脚本进行r ...

  4. 浅谈驱动中强制结束进程的3种方法

    一个应用程序想要结束另一个进程所要做的事:首先获得目标的进程ID,接着利用OpenProcess获取进程句柄(确保足够权限),最后将句柄传给TerminateProcess了结那个进程. OpenPr ...

  5. 普通用户获取sudo root权限的几种方法

    1.在/etc/sudoers文件添加和root一样的命令行,当然是用root用户登录,如下: vi /etc/sudoers 或vim /etc/sudoers (vim标亮显示更易看) 找到 ro ...

  6. html语言显示动态当前日期和时间,举一反三 浅谈在网页上显示日期的两种方法-网页设计,HTML/CSS...

    在上网的时候,经常会在一些网页上看到当前的日期,如:"今天是×年×月×日星期×"等字样.为了显示系统当前的日期,一般采用脚本语言vbscript或javascript,两种语言有其 ...

  7. vbs服务器bat文件,自动以管理员身份运行批处理bat文件(vbs与bat两种方法)

    但是,批处理脚本不会默认已管理员身份运行,一般情况下,我会将脚本命名为"XXXXXX(请右键点击,用管理员身份运行!).bat",但总有些用户会忽略这条提示,直接运行,此时由于权限 ...

  8. 服务器定时任务vbs文件,自动以管理员身份运行批处理bat文件(vbs与bat两种方法)...

    但是,批处理脚本不会默认已管理员身份运行,一般情况下,我会将脚本命名为"XXXXXX(请右键点击,用管理员身份运行!).bat",但总有些用户会忽略这条提示,直接运行,此时由于权限 ...

  9. 浅谈SQL Server内部运行机制

    原文:浅谈SQL Server内部运行机制 对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL ...

最新文章

  1. 磁盘文件目录罗列和list控件的使用
  2. 十五天精通WCF——第十四天 一起聊聊FaultException
  3. ABAP在ALV工具栏显示一个计时器
  4. Material Master_物料类型后台配置
  5. Cython入门.VS.C++
  6. SAP cross distribution chain status在Fiori应用中的draft handling
  7. jsf集成spring_Spring和JSF集成:异常处理
  8. python有多少种模块_python如何查看有哪些模块
  9. HALCON学习之旅(二)
  10. (18)ADS1675高速模式采样率异常解决(学无止境)
  11. OpenStack概念结构与逻辑架构:Conceptual architecture and Logical architecture
  12. 两个字符串 char* a, char* b,输出b在a中的位置次序。
  13. IIS的状态代码(微软文档)
  14. 计算机存储器的分类图片,存储器分类及各自特点有哪些
  15. mysql 内连接查询三表数据_数据库三表连接查询怎么做
  16. MySQL——锁机制和数据库并发问题解决方案
  17. android 的layout
  18. 在线重建索引 oracle,ORACLE重建索引详解
  19. 在openSUSE编译OpenFOAM
  20. 量子计算机生命,量子计算机上量子人工生命模型 - 酷酷UFO

热门文章

  1. RHEL6 64位系统安装ORACLE 10g 64bit 数据库
  2. php webuploader大文件,web uploader 上传大文件总结
  3. 比特币vs分布式账本vs以太坊vs区块链
  4. unity开发入门_Unity游戏开发终极入门指南
  5. gatsby_将您的GraphCMS数据导入Gatsby
  6. RSA加密算法破解及原理
  7. 安装oracle后在cmd,在WINDOWS上安装ORACLE RAC的注意事项
  8. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门
  9. python中执行linux命令(调用linux命令)_Python调用Linux bash命令
  10. leetcode--最小路径和--python