如何创建批处理文件以管理员身份运行cmd

JCh*_*han 32 batch-file

我需要运行一个需要注册DLL的批处理文件.DLL注册失败,因为批处理文件未以"管理员"身份启动命令提示符.

有没有办法通过批处理文件以管理员身份启动" 命令提示符 " .

环境:Win7/Vista

Lok*_*mar 34

这个脚本可以解决问题!只需将其粘贴到bat文件的顶部即可.如果要查看脚本的输出,请在批处理文件的底部添加"暂停"命令.

现在稍微编辑此脚本以支持命令行参数.

@echo off
:: BatchGotAdmin
::-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"="
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
::--------------------------------------

::ENTER YOUR CODE BELOW:
Run Code Online (Sandbox Code Playgroud)


Bal*_*i C 9

您可能必须先使用另一个批处理文件才能使用管理员权限启动第二个批处理文

在第一次使用

runas /noprofile /user:mymachine\administrator yourbatchfile.bat
Run Code Online (Sandbox Code Playgroud)

进一步阅读后,您必须能够在提示符下输入密码.您无法管道密码,因为出于安全原因,此功能已被锁定.

psexec你可能会有更多的运气.

  • 我尝试了上面的命令,但它要求输入我不知道的管理员密码。 (2认同)

Alo*_*dal 7

(这是基于@ DarkXphenomenon的答案,遗憾的是它有一些问题.)

您需要将代码包含在此包装器中:

if _%1_==_payload_  goto :payload

:getadmin
    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload
    echo %~nx0: running payload with parameters:
    echo %*
    echo ---------------------------------------------------
    cd /d %2
    shift
    shift
    rem put your code here
    rem e.g.: perl myscript.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof
Run Code Online (Sandbox Code Playgroud)

这使批处理文件本身作为提升用户运行.它为特权代码添加了两个参数:

  • 单词payload,表示这是有效负载调用,即已经提升.否则它只会一遍又一遍地打开新的流程.

  • 调用主脚本的目录路径.由于Windows 始终 在"%windir%\ system32"中启动提升的cmd.exe,因此无法轻松了解原始路径(保留在不触及代码的情况下复制脚本的能力)

注意:不幸的是,由于某些原因shift不起作用%*,所以如果你需要传递实际的参数,你将不得不诉诸我在example(%1 %2 %3 %4 %5 %6 %7 %8 %9)中使用的丑陋的符号,这也带来了最多9个参数的限制


小智 6

您可以使用链接到批处理文件的快捷方式。只需进入快捷方式的属性并选择高级,然后“以管理员身份运行”。

然后只需隐藏批处理文件,然后运行快捷方式即可。

这样,您甚至可以为快捷方式设置自己的图标。


小智 6

Ctrl+ Shift并双击一个快捷方式以提升权限的进程运行。

也可以从开始菜单运行。


mef*_*ect 6

当脚本文件驻留在非系统驱动器 (c:) 和带有空格的目录中时,防止脚本失败。

Batch_Script_Run_As_Admin.cmd

@echo off
if _%1_==_payload_  goto :payload

:getadmin
    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload

::ENTER YOUR CODE BELOW::   





::END OF YOUR CODE::

echo.
echo...Script Complete....
echo.

pause
Run Code Online (Sandbox Code Playgroud)


小智 5

这适用于我在 Windows 7 到 10 中使用参数,从任何地方(包括浏览器)启动应用程序或文件以及从任何地方访问文件时。用您的代码替换(您的批处理脚本这里锚)。此解决方案可能会有所帮助:)

@echo off

call :isAdmin

if %errorlevel% == 0 (
    goto :run
) else (
    echo Requesting administrative privileges...
    goto :UACPrompt
)

exit /b

:isAdmin
    fsutil dirty query %systemdrive% >nul
exit /b

:run
  <YOUR BATCH SCRIPT HERE>
exit /b

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
exit /B
Run Code Online (Sandbox Code Playgroud)