我的 BAT 文件中有这一行:
"Example1Server.exe"
我想在管理员模式下执行此操作。如何修改bat代码以管理员身份运行?
这是正确的吗?我需要加引号吗?
runas /user:Administrator invis.vbs Example1Server.exe
另一个答案要求您输入管理员帐户密码。此外,在管理员组中的帐户下运行与以管理员身份运行不同,请参阅:维基百科上的UAC
Windows 7 说明
为了以管理员身份运行,请创建批处理文件的快捷方式。
然后您可以设置快捷方式以管理员身份运行:
现在,当您双击快捷方式时,它会提示您进行UAC确认,然后以管理员身份运行(正如我上面所说,这与在管理员组中的帐户下运行不同)
查看下面的截图
注: 当您以管理员身份运行时,当前目录(路径)将与bat文件不同。在很多情况下,bat 文件引用其旁边的相关文件时,这可能会导致一些问题。例如,在我的 Windows 7 中,当前目录将是 SYSTEM32,而不是 bat 文件位置! 要解决此问题,您应该使用
cd "%~dp0"
或更好
pushd "%~dp0"
确保当前目录与bat文件所在的路径相同。
您使用
runas
以特定用户身份启动程序:
runas /user:Administrator Example1Server.exe
只需将其添加到 *.bat 文件的顶部即可:
set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || ( echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )
它将提升为管理员并保留在正确的目录中。在 Windows 10 上测试。
如果您可以使用第三方实用程序,这里有一个
elevate
命令行实用程序。
源代码和二进制文件可在 GitHub 上获得。
这是使用说明:
Usage: Elevate [-?|-wait|-k] prog [args]
-? - Shows this help
-wait - Waits until prog terminates
-k - Starts the the %COMSPEC% environment variable value and
executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog - The program to execute
args - Optional command line arguments to prog
您可以使用nircmd.exe的elevate命令
NirCmd 命令参考 - 提升
elevate [Program] {Command-Line Parameters}
仅适用于Windows Vista/7/2008:以管理员权限运行程序。当[程序]包含一个或多个空格字符时,必须将其放在引号中。
示例:
elevate notepad.exe
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS
elevate "c:\program files\my software\abc.exe"
PS:我在win 10上使用它并且它有效
我的实验表明 runas 命令必须包含管理员用户的域(至少在我组织的环境设置中是这样):
runas /user:AdminDomain\AdminUserName ExampleScript.bat
如果您尚不知道管理员用户的域,请以管理员用户身份运行命令提示符实例,然后输入以下命令:
echo %userdomain%
Kerrek SB和Ed Greaves提供的答案将在管理员用户下执行目标文件,但是,如果该文件是命令脚本(.bat文件)或VB脚本(.vbs文件),则尝试如果在普通登录用户的环境下进行操作(比如修改注册表项),可能会得不到想要的结果,因为脚本实际运行的环境是admin用户的环境,而不是普通登录用户的环境!例如,如果该文件是在注册表的 HKEY_CURRENT_USER 配置单元上运行的脚本,则受影响的“当前用户”将是管理员用户,而不是普通登录用户。
go get github.com/mattn/sudo
然后
sudo Example1Server.exe
当您使用
/savecred
参数时,它会要求输入密码一次,然后就不再要求输入密码。即使您将其放入另一个程序,它也不会要求输入密码。您的问题示例:
runas /user:Administrator /savecred Example1Server.exe
使用此工具将批处理文件转换为.exe:http://www.battoexeconverter.com/然后你可以以管理员身份运行它
我在 Windows 11 上测试了 @Sire 的答案,它的效果非常好。值得一提的是,使用
cmd /k
- 正如@Sire 所使用的那样 - 将使管理员 CMD 在运行完成后保持打开状态。使用 cmd /c
将会在批处理文件结束时关闭窗口。
set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || ( echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/c cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )
我发现可以使用
powershell
。 powershell 将显示默认的 Windows UAC 对话框。
powershell Start -File Example1Server.exe -Verb RunAs
以管理员权限执行BAT文件,BAT文件的内容如下:
@echo off
if "%1"=="runas" (
cd %~dp0
echo Hello from admin mode
pause
) else (
powershell Start -File "cmd '/K %~f0 runas'" -Verb RunAs
)
地点:
%1
第一个输入参数分配给 BAT 文件。%~f0
扩展为执行的 BAT 文件的完整路径%~dp0
扩展到执行 BAT 文件的完整目录路径cmd -C <commands>
在终端中执行命令并关闭在快捷方式属性中使用目标批处理文件的完整物理驱动器\路径。
如果您像我一开始尝试的那样使用替代驱动器,这在 Windows 10 中不起作用...