【问题标题】:How to code a BAT file to always run as admin mode?如何编写 BAT 文件以始终以管理员模式运行?
【发布时间】:2022-02-10 20:17:18
【问题描述】:

我的 BAT 文件中有这一行:

"Example1Server.exe"

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

这是正确的吗?我需要加上引号吗?

runas /user:Administrator invis.vbs Example1Server.exe

【问题讨论】:

标签: windows batch-file


【解决方案1】:

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

Windows 7 说明

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

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

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

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

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

查看下面的截图

注意: 当您以管理员身份运行时,当前目录(路径)将与 bat 文件不同。在很多情况下,这可能会导致一些问题,因为 bat 文件引用了它旁边的相关文件。例如,在我的 Windows 7 中,当前目录将是 SYSTEM32 而不是 bat 文件位置! To workaround it,你应该使用

cd "%~dp0"

或更好

pushd "%~dp0"

确保 cur dir 与 bat 文件所在的路径相同。

【讨论】:

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

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

runas /user:Administrator Example1Server.exe

【讨论】:

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

只需将其添加到 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 上测试。

【讨论】:

  • 在 Windows 7 中测试并且运行良好。但是你能解释一下它的作用吗?我对bat文件不熟悉。
  • 它创建一个 VBScript 文件,其中包含将您提升为管理员的代码(如果您还没有),并再次运行 bat 文件,这次是管理员。
  • 我在寻找什么!无需额外更改或额外文件!
  • getadmin.vbs 是什么?
  • 将两行代码添加到我现有的批处理文件中对我来说是一个很好的解决方案。我还必须将exit 添加到批处理文件的末尾,否则我将被留在提示符下。这可能是因为 .vbs 启动了第二个命令提示符。
【解决方案4】:

如果您可以使用第三方实用程序,here is an elevate command line utility

源代码和二进制文件可在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

【讨论】:

  • elevate.exe 摇滚!
【解决方案5】:

你可以使用nircmd.exeelevate命令

NirCmd 命令参考 - 提升

elevate [Program] {Command-Line Parameters}

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

例子:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PS:我在 win 10 上使用它,它可以工作

【讨论】:

    【解决方案6】:
    go get github.com/mattn/sudo
    

    然后

    sudo Example1Server.exe
    

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 请记住,许多防病毒软件对以这种方式构建的 exe 文件非常敏感。以这种方式“转换/加密”批处理文件是恶意程序使用的旧方式。
      • 如果您使用 Symantec 分析此域 - 威胁类型:其他恶意软件 威胁原因:域报告并验证为提供恶意软件。识别为恶意域或 URL。
      • 不好的建议!
      【解决方案8】:
      1. 我的实验表明 runas 命令必须包含管理员用户的域(至少在我组织的环境设置中是这样):

        runas /user:AdminDomain\AdminUserName ExampleScript.bat
        

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

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

      【讨论】:

        【解决方案9】:

        当您使用/savecred 参数时,它会询问一次密码,然后再也不询问。即使你把它放到另一个程序上,它也不会要求输入密码。您的问题示例:

        runas /user:Administrator /savecred Example1Server.exe

        【讨论】:

          【解决方案10】:

          我发现可以使用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> 在终端执行命令并关闭

          【讨论】:

            【解决方案11】:

            我在 Windows 11 上测试了 @Sire's answer,它就像一个魅力。值得一提的是,使用cmd /k - 正如@Sire 所使用的那样 - 将在Administrator 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 )
            

            【讨论】:

            • 自最新更新(2022 年 3 月)起,也可在 Windows 10 上完美运行。相比之下,Sire 的回答实际上并没有奏效。
            【解决方案12】:

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

            如果您像我一开始尝试那样使用 subst 驱动器,这在 Windows 10 中不起作用...

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-10-06
              • 1970-01-01
              • 1970-01-01
              • 2011-03-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多