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

Batch file 如何创建以管理员身份运行cmd的批处理文件,batch-file,Batch File,我需要运行一个批处理文件,需要注册一个DLL。DLL注册失败,因为批处理文件未以“管理员”身份启动命令提示符 是否可以通过批处理文件以管理员身份启动“命令提示符” 环境:Win7/Vista您可能必须首先使用另一个批处理文件来启动具有管理员权限的第二个批处理文件 第一次使用 runas /noprofile /user:mymachine\administrator yourbatchfile.bat 进一步阅读后,您必须能够在提示下键入密码。由于安全原因,此功能已被锁定,因此无法通过管道传递

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

是否可以通过批处理文件以管理员身份启动“命令提示符”


环境:Win7/Vista

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

第一次使用

runas /noprofile /user:mymachine\administrator yourbatchfile.bat
进一步阅读后,您必须能够在提示下键入密码。由于安全原因,此功能已被锁定,因此无法通过管道传递密码

您可能会更幸运。

(这是基于,不幸的是,它有一些问题。)

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

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
这使批处理文件以提升用户身份运行。它向特权代码添加了两个参数:

  • word
    有效载荷
    ,表示这是有效载荷呼叫,即已提升。否则 它只会一次又一次地开启新的流程

  • 调用主脚本的目录路径。因为Windows总是 在“%windir%\system32”中启动提升的cmd.exe,很难知道是什么 原来的路径是(并且保留了在没有任何限制的情况下复制脚本的能力) 触摸码)

注意:不幸的是,由于某些原因,
shift
不适用于
%*
,因此如果您需要 要传递实际的参数,您必须使用我使用的丑陋符号 在示例中(
%1%2%3%4%5%6%7%8%9
),这也带来了
最多9个参数

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

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


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

这可能是一个解决方案,我也做过类似的事情,但这个似乎不起作用 例如,如果必要的功能需要管理员权限,它应该要求您以管理员身份重新启动它

@echo off
mkdir C:\Users\cmdfolder

if echo=="Access is denied." (goto :1A) else (goto :A4)

:A1
cls 
color 0d
echo restart this program as administator

:A4
pause

也许是这样的:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)

这个脚本就成功了!只需将其粘贴到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:
按Ctrl+Shift并双击快捷方式以作为提升进程运行


也可以从“开始”菜单中使用。

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

@echo关闭
电话:isAdmin
如果%errorlevel%==0(
后藤:快跑
)否则(
echo正在请求管理权限。。。
后藤:UACPrompt
)
退出/b
:isAdmin
fsutil脏查询%systemdrive%>nul
退出/b
:运行
退出/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
删除“%temp%\getadmin.vbs”
退出/B

正如用户2549366之前所建议的,“您可以使用链接到批处理文件的快捷方式。”但在快捷方式的“属性->兼容性”选项卡中,可能会禁用“以管理员身份运行”


因此,您只需右键单击“file.bat-shortcut”,然后转到->属性->快捷方式选项卡->高级,在那里您可以单击以管理员身份运行。之后,您可以执行快捷方式

使用记事本或您选择的任何文本编辑器制作文本。打开记事本,编写不带引号A的短命令“cmd.exe”,并将其另存为cmd.bat


单击cmd.bat并选择“以管理员身份运行”。

这是基本相同文件的更简单版本

@echo off
break off
title C:\Windows\system32\cmd.exe
cls

:cmd
set /p cmd=C:\Enter Command:

%cmd%
echo.
goto cmd

当脚本文件位于非系统驱动器(c:)上且位于带有空格的目录中时,防止脚本失败

批处理脚本\u作为\u 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

另请参见@EdGreaves,该链接是否与此问题无关?另请参见:问题不明确:问题是以用户管理员身份运行它,还是以管理权限运行它?我将尝试实现您的解决方案,我尝试了上述命令,但它要求输入我不知道的管理员密码。@JChan您似乎无法自动填写密码,此功能已禁用,请参阅我的更新答案。我的
以管理员身份运行
复选框已禁用。我怎么才能克服呢?嗯,不确定。这很有趣。@NamGVU@NamGVU您可以从这里下载已创建的可移植(在
Windows XP
中生成)快捷方式集:或者甚至生成您自己的快捷方式集:此代码用于启用Windows update服务。但不适用于禁用windows update服务
sc stop wauserv&sc config wauserv start=disabled
注意:如果从不同驱动器的子目录运行,此代码有时不起作用。请看我的问题:天哪,这非常有效!在我这个年龄,一切都是批处理文件和DOS编程,知道大多数技巧,但没有意识到这是可能的!我印象深刻!谢谢分享!这只会屏蔽控制台,而不会要求提升为管理员
@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