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

kar*_*ari 138 windows batch-file

我在BAT文件中有这一行:

"Example1Server.exe"
Run Code Online (Sandbox Code Playgroud)

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

它是否正确?我需要加上报价吗?

runas /user:Administrator invis.vbs Example1Server.exe
Run Code Online (Sandbox Code Playgroud)

Ed *_*ves 347

另一个答案要求您输入管理员帐户密码.此外,在管理员组中的帐户下运行与管理员运行不同,请参阅:维基百科上的UAC

Windows 7说明

要以管理员身份运行,请为批处理文件创建快捷方式.

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

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

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

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

查看下面的截图

截图

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

cd "%~dp0"

或更好

pushd "%~dp0"

确保cur目录与bat文件所在的路径相同.

  • 啊,这确实是隐藏的(我们大多数人都不认为那个高级按钮有这个选项).我几乎肯定无论谁想到其他复杂的答案都不知道.这是90%以上的访问者想要的答案. (8认同)
  • 这对我在Windows 10或Windows 7上都不起作用.当我尝试以管理员身份运行时,通过右键单击BAT文件和"以管理员身份运行",或使用此处描述的技术,批处理文件闪烁打开一秒钟然后立即关闭,批处理文件中没有命令或程序执行.我已经尝试运行非常简单的批处理文件,这些文件只是回显"Hello World",它们也以这种方式失败.这非常令人沮丧.到目前为止,我还没有找到解决方案. (3认同)
  • 我同意。这应该是答案。我还添加了屏幕截图,以便更容易找到**高级**按钮 (2认同)
  • @JonathanElkins您是否尝试在批处理文件末尾添加暂停? (2认同)

Ker*_* SB 66

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

runas /user:Administrator Example1Server.exe
Run Code Online (Sandbox Code Playgroud)

  • 管理员帐户可能未命名为Administrator (17认同)
  • 我担心这个答案不是90%的访问者想要的,因为它比右键点击更难 - >以管理员身份运行,即使它在技术上是正确的.再次检查另一个答案.这正是大多数人想要的. (14认同)
  • 不,这个答案在技术上是不正确的._Running as administrator_与在名称恰好是Administrator的用户下运行不同,并且权限不同.看到另一个答案. (12认同)
  • @Anders:不,可能不会; 我假设OP可以"发现模式".这不是一个plz-give-me-teh-codez的答案:-S顺便说一句,我应该添加OP可能需要一些更复杂的命令,如`runas/User:abc"csript myscript.vbs"`,或` runas /用户:abc"cmd/c start ..."`. (9认同)
  • @karikari:这样的名字(`Example1Server.exe`)不需要放在引号中,但在其他一些情况下(如名称中的空格:`Example1 Server.exe`)你确实需要它们.不过,即使不需要,你也可以*使用引号. (6认同)

Sir*_*ire 15

只需将其添加到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 )
Run Code Online (Sandbox Code Playgroud)

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

  • 将两行代码添加到我现有的批处理文件中对我来说是一个很好的解决方案。我还必须将“exit”添加到批处理文件的末尾,否则我会留在提示符下。这可能是因为 .vbs 启动了第二个命令提示符。 (5认同)
  • 如果从 C 驱动器以外的驱动器运行,则此操作不起作用。提升到管理员权限后,我收到“系统找不到指定的驱动器”。 (3认同)
  • 它创建一个 VBScript 文件,其中包含将您提升为管理员(如果您还没有)的代码,并再次运行 bat 文件,这次是作为管理员。 (2认同)

aph*_*ria 8

如果您可以使用第三方实用程序,这是一个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
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

Dhe*_*kar 6

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

NirCmd命令参考 - 提升

elevate [Program] {Command-Line Parameters}
Run Code Online (Sandbox Code Playgroud)

仅适用于Windows Vista/7/2008:运行具有管理员权限的程序.当[程序]包含一个或多个空格字符时,必须将其放在引号中.

例子:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"
Run Code Online (Sandbox Code Playgroud)

PS:我在win 10上使用它并且它有效


mat*_*ttn 6

go get github.com/mattn/sudo
Run Code Online (Sandbox Code Playgroud)

然后

sudo Example1Server.exe
Run Code Online (Sandbox Code Playgroud)


pst*_*ton 6

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

    \n\n
    runas /user:AdminDomain\\AdminUserName ExampleScript.bat\n
    Run Code Online (Sandbox Code Playgroud)\n\n

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

    \n\n
    echo %userdomain%\n
    Run Code Online (Sandbox Code Playgroud)
  2. \n
  3. Kerrek SBEd Greaves提供的答案将在管理员用户下执行目标文件,但是,如果该文件是尝试在正常登录下操作的命令脚本(.bat 文件)或 VB 脚本(.vbs 文件) user\xe2\x80\x99s 环境(如修改注册表项),可能得不到想要的结果,因为脚本实际运行的环境是admin用户的环境,而不是普通登录用户的环境!例如,如果该文件是在注册表 \xe2\x80\x99s HKEY_CURRENT_USER 配置单元上运行的脚本,则受影响的 \xe2\x80\x9ccurrent-user\xe2\x80\x9d 将是管理员用户,而不是正常登录用户用户。

  4. \n
\n


Ano*_*ous 5

我想我有一个密码问题的解决方案.这个单一的论点确实令人惊叹.它要求输入一次密码,而不是再次询问密码.即使你把它放到另一个程序上,它也不会要求输入密码.这里是:

runas /user:Administrator /savecred Example1Server.exe


Ach*_*les 5

我在 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 )
Run Code Online (Sandbox Code Playgroud)

  • 自最新更新(2022 年 3 月)起,也可在 Windows 10 上完美运行。相比之下,陛下的回答实际上并没有起作用。 (2认同)