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

转载知乎的一个回答

作者:Scruel 链接:https://www.zhihu.com/question/34541107/answer/243592603 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

正好看到, 那就一行代码解决问题吧

net file 1>NUL 2>NUL || start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c pushd ""%~dp0"" && ""%~s0"" %*","","runas",0)(window.close) && exit

如果VBScript 被砍掉,则可用 powershell 来执行,原理是一样的:

net file 1>NUL 2>NUL || powershell Start-Process -FilePath cmd.exe -ArgumentList """/c pushd %~dp0 && %~s0 %*""" -Verb RunAs && exit

可支持:

  • 带空格的脚本路径
  • 自动切换至脚本所在的路径
  • 脚本参数传递
  • 可隐藏窗口执行脚本(下文)

需要隐藏窗口执行的话,对于 mshta 版本,只需要改变 0 为 1 即可:

net file 1>NUL 2>NUL || start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c pushd ""%~dp0"" && ""%~s0"" %*","","runas",1)(window.close) && exit

以及 powershell 版本,简单增加 -WindowStyle Hidden 即可:

net file 1>NUL 2>NUL || powershell Start-Process -FilePath cmd.exe -ArgumentList """/c pushd %~dp0 && %~s0 %*""" -Verb RunAs -WindowStyle Hidden && exit

解释一下:

当前值当前值含义
%~s0脚本的绝对路径
%~dp0脚本所在目录的绝对路径
runas以管理员权限执行

使用 cmd.exe 来执行,是为了能让脚本在执行时,自动切换到其所在的路径,因为直接通过 ShellExecute执行,并不能做到自动切换目录。

Licensed under CC BY-NC-SA 4.0
最后更新于 2025-05-11 12:43:17
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计