当前位置: 系统豆 >  系统教程 >  电脑教程 >  bat管理员身份运行程序

bat管理员身份运行程序 Windows系统下bat批处理以管理员权限运行的方法

更新时间:2024-05-20 09:40:37作者:xtang

  在Windows系统中,有时候我们需要以管理员权限运行bat批处理文件来执行一些系统操作或程序,在普通用户身份下运行bat文件时,可能会遇到权限不足的问题。为了解决这个问题,我们可以通过一些方法来以管理员身份运行程序,保证我们可以顺利执行需要管理员权限的操作。接下来我们就来了解一下在Windows系统下如何以管理员权限运行bat批处理文件的方法。

bat管理员身份运行程序 Windows系统下bat批处理以管理员权限运行的方法 目录1、第一种方法2、bat脚本获取管理员权限cd /d %~dp0及其用途3、bat脚本中以管理员权限执行命令分析相关命令/用法①mshta 命令②Shell.ShellExecute 方法(vbs语法)③findstr④符号4、自动以管理员身份运行批处理(bat)文件5、以管理员权限执行bat脚本6、如何让BAT和CMD批处理以管理员身份运行7、命令行CMD批处理自动以管理员身份运行的正确方法8、bat文件以管理员权限运行的几种方式9、BAT批处理提权

但是,批处理脚本不会默认已管理员身份运行,一般情况下,我会将脚本命名为"XXXXXX(请右键点击,用管理员身份运行!).bat",但总有些用户会忽略这条提示,直接运行,此时由于权限不足,导致脚本运行失败。我们可以使用一种变通的方法,让bat启动时,首先调用vbs脚本,通过vbs脚本,以管理员身份调用该bat的 runas 部分

我们的脚本可以写在runas 下,这样就点击该bat脚本,就可以已管理员身份运行了

1、第一种方法

有的电脑是非管理员登录,运行程序时,需要提示是否运行运行。解决方法如下:

@ echo off%1 %2ver|find "5.">nul&&goto :Adminmshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof:Admin//在你的bat开头加上上面的命令即可//下面是你需要执行的命令set path=%~dp0echo install mysql service...echo %path%cd %path%\bin\mysqld.exe --remove mysqlmysqld.exe --install mysqlecho start mysql Serviceo"%SystemRoot%"\system32\net start mysql

2、bat脚本获取管理员权限
@echo off%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exitcd /d "%~dp0"

cd /d %~dp0及其用途

在WINDOWS下命令CD / D%〜DP0是什么意思

有人可以帮我理解命令cd /d %~dp0及其用途。 再次dos命令如下

cd /d %~dp0

请帮我弄清楚它的含义。

我们来剖析一下。 有三个部分:

cd – 这是更改目录命令。/d – 这个开关让cd改变驱动器和目录。 没有它,你将不得不做cd %~d0 & cd %~p0 。%~dp0 – 这可以进一步分为三个部分:

%0 – 这表示批处理脚本的第零个参数。 它扩展到batch file本身的名称。

%~0 – 在那里解开扩展参数的双引号( " )。

%dp0 – d和p有扩展的修饰符。 d强制添加一个驱动器号并添加完整path。

〜dp0:d =驱动器,p =path,%0 =此batch file的起始目录cd /d %~dp0会将path更改为相同的位置,batch file所在的位置

见for /? 更多细节

写在bat文件的顶端就可以实现。

3、bat脚本中以管理员权限执行命令

在bat脚本文件第一行加上下面命令:

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

仅提权,将上方代码块内容复制到bat开头即可

ver|findstr "[3-5]\.[0-9]\.[0-9]*" 1>nul 2>nul&&goto :st

如需适配xp及更旧的系统,将该句提前并将主体放到:st标签下

fltmc 1>nul 2>nul&& goto :stset parameters=:parameter@if not "%~1"=="" ( set parameters=%parameters% %~1& shift /1& goto :parameter)set parameters="%parameters:~1%"mshta vbscript:createobject("shell.application").shellexecute("%~s0",%parameters%,"","runas",1)(window.close)&exitcd /d %~dp0

因为没找到把环境全部传过去的参数/命令,就手写了一下参数传递,不过无法处理引号内有空格的参数,会分成多个参数,需另找办法

分析 核心:Shell.ShellExecute 方法 对指定文件执行指定操作,以管理员权限运行脚本;也有另一种运行cmd.exe加参数的写法ver命令获取系统版本号fltmc命令用于判断是否已拥有管理员权限 

相关命令/用法

①mshta 命令

mshta vbscript:<commmand>mshta javascript:<command>

②Shell.ShellExecute 方法(vbs语法)

https://learn.microsoft.com/zh-cn/windows/win32/shell/shell-shellexecute 

iRetVal = Shell.ShellExecute( _  sFile, _  [ ByVal vArguments ], _  [ ByVal vDirectory ], _  [ ByVal vOperation ], _  [ ByVal vShow ] _)

③findstr
findstr [/b] [/e] [/l | /r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/f:<file>] [/c:<string>] [/g:<file>] [/d:<dirlist>] [/a:<colorattribute>] [/off[line]] <strings> [<drive>:][<path>]<filename>[ ...]

注解

所有 findstr 命令行选项都必须位于命令字符串中的 strings 和 filename 之前。

正则表达式使用文本字符和元字符查找文本模式,而不是确切的字符串。

文本字符是在正则表达式语法中没有特殊含义的字符,它只是匹配该字符的出现。 例如,字母和数字是文本字符。

元字符是正则表达式语法中具有特殊含义的符号(运算符或分隔符)。

https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/findstr

④符号

&:顺序执行多条命令,无论上一句命令是否执行成功

&&:顺序执行多条命令,当没有正常执行上一句命令后停止

||: 顺序执行多条命令,只有上一句命令执行错误/未执行时继续

%n:参数,%0为脚本本身

https://learn.microsoft.com/zh-cn/archive/blogs/zainala/using-0-inside-the-batch-file-to-get-the-file-info

1>nul:不显示命令运行的正确提示

2>nul:不显示错误提示

>:重定向

nul:空设备

@: 命令行回显屏蔽符

|:命令管道符,将命令结果作为参数

冒号:字符串截取、标签

双冒号:作为注释使用

4、自动以管理员身份运行批处理(bat)文件

示例代码如下

@ECHO OFFsetlocal EnableDelayedExpansioncolor 3etitle 添加服务配置 PUSHD %~DP0 & cd /d "%~dp0"%1 %2mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof:runas ::填写自己的脚本 echo 执行完毕,任意键退出 pause >nulexit

5、以管理员权限执行bat脚本

只需要在你编写的.bat文件的开头加上以下脚本,然后双击.bat文件即是以管理员权限执行

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

6、如何让BAT和CMD批处理以管理员身份运行

如何让BAT和CMD批处理以管理员身份运行?

有些批处理需要很高的权限执行才能达到我们所需要的效果,将以下代码放入批处理最顶部就可以实现以管理员身份运行了。

@echo off>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin ):UACPromptecho Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs""%temp%\getadmin.vbs"exit /B:gotAdminif exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

7、命令行CMD批处理自动以管理员身份运行的正确方法

修正了路径有空格时的问题

在批处理开头加上:

适用于无参数

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

适用于一参数

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

更多参数的以此类推运行批处理时多加一个参数::,这句就不会执行为了兼容8.3短路径,可把%~0等换成%~s0等理论上是没问题,但启动路径有时不可靠,之后可能还要pushd或cd /d

8、bat文件以管理员权限运行的几种方式

1、创建bat快捷方式,然后右键快捷方式-->properties-->advanced-->Run as administrator。2、下载bat转成exe工具,将bat转成exe,然后右键exe-->properties-->Compatibility-->Run as administrator。3、以管理员权限运行cmd,然后dos框中运行相应的bat。

9、BAT批处理提权

给BAT批处理提权,基本都是借助VBS脚本提权

@echo off>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"if '%errorlevel%' EQU '5' (goto UACPrompt) else ( goto gotAdmin ):UACPromptecho Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs""%temp%\getadmin.vbs"exit /B:gotAdminif exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )pushd "%CD%"CD /D "%~dp0"rem 后面跟想要执行的批处理

将这种方法的原理是:会先执行一个命令,该命令需要管理员权限。如果没有管理员权限就会返回错误码5,然后在系统的Temp文件创建一个VBS脚本,在VBS脚本里用ShellExecute方法以runas的方式开一个进程,runas开的进程会以管理员权限运行。开的那个进程会再执行这个批处理,此时因为有权限,会返回0,然后删除VBS文件,执行自己写的那部分脚本。

会出现的问题:如果需要从外界传参数给该bat批处理,需要在下面这个位置传,但是传过去的参数需要遵守VBS里的语法和ShellExecute的参数格式。如果出现了空格会十分麻烦。

echo UAC.ShellExecute "%~s0", "这里输入参数", "", "runas", 1 >> "%temp%\getadmin.vbs"

到此这篇关于bat管理员身份运行程序的文章就介绍到这了,更多相关管理员权限运行bat内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

  以上就是关于bat管理员身份运行程序的全部内容,如果有遇到相同情况的用户,可以按照本文的方法来解决。

Copyright ©  2009-2024 系统豆 www.xtdptc.com 版权声明 网站地图