%1 mshta vbscript之管理员权限运行bat的解读

 更新时间:2024年07月09日 11:48:29   作者:重新开始的码农  
最近发现很多朋友咨询%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit的意思,这里就为大家简单介绍一下

一、提取代码

注意功能就是将当前bat的执行提升为管理员,因为有些操作只有管理员才可以执行,否则就会出现错误,为了方便用户特将这句话写到bat的开头,利用vbs实现提取运行当前的bat文件

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit
cd %~dp0
%~d0
taskkill /im python.exe /f
taskkill /im java.exe /f
taskkill /im node.exe /f
taskkill /im npm.exe /f
python lanuch_python.py

或者

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"

二、资料

 批处理,%~d0 cd %~dp0 代表什么意思

批处理,%~d0 cd %~dp0 代表什么意思
 
~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录
cd是转到这个目录,不过我觉得cd /d %~dp0 还好些

选项语法:

    ~0         - 删除任何引号("),扩充 %0
    %~f0        - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
    %~d0        - 仅将 %0 扩充到一个驱动器号
    %~p0        - 仅将 %0 扩充到一个路径
    %~n0        - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
    %~x0        - 仅将 %0 扩充到一个文件扩展名
    %~s0        - 扩充的路径只含有短名(“s”为Short,短的)
    %~a0        - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
    %~t0        - 将 %0 扩充到文件的日期/时间(“t”time)
    %~z0        - 将 %0 扩充到文件的大小(Size 大小)
    %~PATH:0−查找列在路径环境变量的目录,并将
PATH:0 - 查找列在路径环境变量的目录,并将 %I 扩充
                  到找到的第一个驱动器号和路径。
    %~ftza0     - 将 %0 扩充到类似输出线路的 DIR

%0为当前批处理文件
如果0换成1为第一个文件,2为第2个

三、分析

1、“cd %~dp0”

分析:cd 到 该脚本所在的目录下。

2、“%~d0”

分析:仅将 %0 扩充到一个驱动器号

3、“%1”

分析:%1 指批处理文件名后加的以空格分隔的字符串

4、“%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit”

分析:当需要在Windows中使用管理员身份运行cmd时,可以使用vbs来进行

5、"^&chr(34)^&"

分析:双引号的ASCII码

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

很多用了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

到此这篇关于%1 mshta vbscript之管理员权限运行bat的解读的文章就介绍到这了,更多相关%1 mshta vbscript内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • dos 内容重定向符 > 和 >>

    dos 内容重定向符 > 和 >>

    当我们在cmd窗口中查询某条命令的帮助信息的时候,帮助信息是显示在命令行窗口中的,命令行窗口关闭后,这些帮助信息就看不到了,如果下次还想看,又得在命令行窗口中输入查询命令,比较繁琐。
    2009-07-07
  • Windows WMIC命令使用详解(附实例)

    Windows WMIC命令使用详解(附实例)

    第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令以交互的方式执行
    2014-05-05
  • 三个不同文件停顿二秒弹出不同窗口的批处理

    三个不同文件停顿二秒弹出不同窗口的批处理

    给网吧做的执行三个不同文件停顿二秒弹出不同窗口,希望大家指正! 要用的就拿去!自己修改下就可以用了!by:废铁
    2008-06-06
  • Dos批处理常用命令大全扫盲篇

    Dos批处理常用命令大全扫盲篇

    个人也是Dos命令的爱好 当然掌握了dos对一个电脑爱好者也是不会有坏处的。感觉看懂dos后再去接触别的编程更加容易懂了。本人也就是这么过来的。下面就是一些收集的命令。命令下还有一些解说
    2016-11-11
  • 批处理cmd之桌面快捷方式创建工具

    批处理cmd之桌面快捷方式创建工具

    今天需要将一个便携版的软件配一个桌面快捷方式,发现用批处理做个挺好的,开源也利于大家学习,脚本之家小编特整理成了函数方便调用
    2021-10-10
  • Windows批处理文件执行后中文乱码问题的解决方法

    Windows批处理文件执行后中文乱码问题的解决方法

    在使用Windows批处理文件时,中文乱码是一个常见的问题,这通常是因为文件的编码格式与命令行(cmd)默认使用的编码格式不一致导致的,下面我们将简单讲讲如何解决这一问题,确保批处理文件中的中文字符能够正确显示,需要的朋友可以参考下
    2024-11-11
  • DOS批处理脚本语言简介与详细说明

    DOS批处理脚本语言简介与详细说明

    DOS批处理脚本语言简介与详细说明...
    2007-03-03
  • 批处理输出n阶幻方脚本

    批处理输出n阶幻方脚本

    幻方又称为魔方,方阵或厅平方。在一个由若干个排列整齐的数组成的正方形中,图中任意一横行、一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为“幻方”,下面是一个用批处理输出n阶幻方的示例
    2014-04-04
  • 超简单超强悍的清理C盘垃圾文件方法

    超简单超强悍的清理C盘垃圾文件方法

    教大家自己写个程序,这个程序是自动清理电脑里的垃圾而不会破坏系统,比很多软件都好哦
    2007-04-04
  • 定时检查网站是否掉线的批处理

    定时检查网站是否掉线的批处理

    定时检查网站是否掉线的批处理...
    2006-10-10

最新评论