如何编写BAT文件以始终以管理员模式运行?


149

我的BAT文件中包含以下行:

"Example1Server.exe"

我想在管理员模式下执行此操作。如何修改蝙蝠代码以管理员身份运行?

这样对吗?我需要加引号吗?

runas /user:Administrator invis.vbs Example1Server.exe


Answers:


71

您用于runas以特定用户身份启动程序:

runas /user:Administrator Example1Server.exe

6
@karikari:像这样的名称(Example1Server.exe)不需要用引号引起来,但是在其他情况下(例如名称中的空格:),Example1 Server.exe您确实需要它们。即使您不需要引号,也可以使用它们。
Andriy M

18
该管理员帐户可能不被命名为管理员
安德斯

9
@安德斯:不,可能不会;我假设OP可以“发现模式”。这不是plz-give-me-teh-codez的答案:-S顺便说一句,我应该添加OP可能需要一些更复杂的命令,例如runas /User:abc "csript myscript.vbs"runas /User:abc "cmd /c start ..."
Kerrek SB 2011年

16
我担心这个答案不是90%的访客想要的,因为它甚至比按鼠标右键单击->以admin身份运行更困难,即使从技术上讲它是正确的。再次检查其他答案。这正是大多数人想要的。
13年

13
不,这个答案在技术上是不正确的。以管理员身份运行与在名称恰好为管理员的用户下运行不同,并且特权不同。查看其他答案。
亚历山大·盖布赫

370

另一个答案要求您输入管理员帐户密码。另外,在管理员组中的帐户下运行与以管理员身份运行时不同,请参阅:Wikipedia上的UAC

Windows 7说明

为了以管理员身份运行,请为批处理文件创建一个快捷方式。

  1. 右键单击批处理文件,然后单击复制
  2. 导航到您想要快捷方式的位置
  3. 右键单击目录背景
  4. 选择粘贴快捷方式

然后,您可以设置快捷方式以管理员身份运行:

  1. 右键单击快捷方式
  2. 选择属性
  3. 在快捷方式选项卡中,单击高级。
  4. 选中“以管理员身份运行”复选框
  5. 单击确定,确定

现在,当您双击快捷方式时,它将提示您进行UAC确认,然后以管理员身份运行(如上所述,这与在管理员组中的帐户下运行是不同的)

检查以下屏幕截图

屏幕截图

注意: 当您以“以管理员身份运行”时,当前目录(路径)将与bat文件不同。在许多情况下,bat文件引用旁边的相对文件可能会导致一些问题。例如,在我的Windows 7中,当前目录将是SYSTEM32,而不是bat文件位置! 要解决此问题,您应该使用

cd "%~dp0"

或更好

pushd "%~dp0"

确保cur dir与bat文件位于同一路径。


8
啊,那确实是隐藏的(我们大多数人都不认为高级按钮包含该选项)。我几乎可以肯定,想到其他复杂答案的人都不知道。这是90%以上的访客想要的答案。
13年

1
我同意。这应该是答案。我还添加了一个屏幕截图,以便更轻松地找到“ 高级”按钮
fedmich

1
这也适用于Windows Server 2012 R2。
garec 2015年

3
在Windows 10或Windows 7上,这对我均不起作用。当我尝试以管理员身份运行时,通过右键单击BAT文件和“以管理员身份运行”,或使用此处介绍的技术,批处理文件将闪烁一秒钟。然后立即关闭,而批处理文件中没有任何命令或程序正在执行。我尝试运行非常简单的批处理文件,这些文件仅回显“ Hello World”,并且它们也以这种方式失败。这非常令人沮丧。到目前为止,我还没有找到解决方案。
乔纳森·埃尔金斯

1
@JonathanElkins您是否尝试在批处理文件的末尾添加暂停?
Ed Greaves

32

只需将其添加到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 )

它将提升为admin并保留在正确的目录中。在Windows 10上测试。


1
在Windows 7中进行了测试,效果很好。但是您能解释一下它的作用吗?我对bat文件不熟悉。
Sunfloro

1
它会创建一个VBScript文件,其代码可将您提升为admin(如果尚未添加),然后再次以admin身份运行bat文件。
父亲

1
我到底在寻找什么!无需任何额外的更改或文件!
MSS

1
什么是getadmin.vbs?
Kiquenet

4
对我来说,将您的两行代码添加到我现有的批处理文件中是一个很好的解决方案。我还必须添加exit到批处理文件的末尾,否则我将被提示。这可能是因为.vbs启动了另一个命令提示符。

10

如果可以使用第三方实用程序,则这里是elevate命令行实用程序

这是用法说明:

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

elevate.exe石头!
李三福

8

您可以使用nircmd.exe迅速提升命令

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:我在胜利10上使用它,它可以正常工作


6

使用以下工具将批处理文件转换为.exe:http : //www.battoexeconverter.com/,然后您可以以管理员身份运行它


2
请记住,许多防病毒软件对以这种方式构建的exe文件非常敏感。这种“转换/加密”批处理文件是恶意程序使用的一种旧方法。
哈米

如果您使用Symantec分析此域-威胁类型:othermalware威胁原因:报告该域并将其验证为可服务的恶意软件。标识为恶意域或URL。
Sunil

不好的建议!
弗拉德


6

我认为我有解决密码问题的方法。这一个论点确实令人惊讶。它要求输入一次密码,然后再也不要求输入密码。即使将其放在另一个程序上,它也不会要求输入密码。这里是:

runas /user:Administrator /savecred Example1Server.exe


4
  1. 我的实验表明,runas命令必须包含管理员用户的域(至少在我组织的环境设置中是如此):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    如果您尚不知道管理员用户的域,请以管理员用户身份运行命令提示符实例,然后输入以下命令:

    echo %userdomain%
    
  2. Kerrek SBEd Greaves提供的答案将在admin用户下执行目标文件,但是,如果该文件是尝试对普通登录进行操作的Command脚本(.bat文件)或VB脚本(.vbs文件)。用户的环境(例如更改注册表项),您可能无法获得理想的结果,因为脚本实际运行的环境将是管理员用户的环境,而不是普通登录用户的环境!例如,如果文件是在注册表的HKEY_CURRENT_USER配置单元上运行的脚本,则受影响的“当前用户”将是admin用户,而不是普通登录用户。


0

在快捷方式“属性”中使用完整的物理驱动器\目标批处理文件的路径。

如果您像我一开始那样尝试使用替代驱动器,则在Windows 10中将无法使用...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.