2014-07-28 03:24:17 +0000 2014-07-28 03:24:17 +0000
50
50

是否可以以管理员身份自动运行批处理文件

我想知道是否可以在双击批处理文件时,以管理员身份自动打开批处理文件,因为需要用管理权限来运行命令。

注意:我已经知道右击文件后点击Run As Administrator的解决方法,但这不是自动解决的。

答案 (9)

45
45
45
2014-07-28 03:43:30 +0000

是的,你可以用管理权限运行一个批处理文件。不幸的是,你不能直接从批处理文件本身做这件事。

要创建一个快捷方式,有很多方法,但最简单、最快的方法是使用上下文菜单中的发送至选项。要将批处理文件提升为管理员身份运行,请按照以下步骤操作。

  1. 右键点击你刚刚创建的快捷方式(应该在桌面上或任何你发送的地方)
  2. 在快捷方式选项卡下,点击高级…按钮
  3. 勾选 “以管理员身份运行 "复选框,然后按 "确定",进入模式窗口和主属性窗口。双击快捷方式,运行该快捷方式,批处理文件将以管理员身份运行。
33
33
33
2014-12-15 16:55:24 +0000

如Ben Gripka对另一个问题的回答发布的:

REM --add the following to the top of your bat file--

@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"
:--------------------------------------
5
5
5
2015-02-10 14:25:39 +0000

在Windows 7上

  1. 创建一个快捷方式到该批处理文件

  2. 右键点击快捷方式文件

  3. 点击进阶按钮,找到以管理员身份运行的复选框

查看下面的截图*

4
4
4
2014-10-07 18:42:22 +0000

接受的答案确实是可以的。但我发现在Windows 7中,每次点击快捷方式时,我都要忍受UAC对话框。这在IMHO中大大减损了这个问题中的 “自动"!

然后我发现,在我自己的情况下,问题中的.bat文件是要通过任务调度器来运行的。这种情况下,在任务的Run with highest privileges选项卡上勾选General选项,很好地解决了这个问题。 还是可以吗?

3
3
3
2015-05-31 14:49:17 +0000

你可以使用我的脚本Batch/Admin来自动提升Administrator在任何类型的Batch自己的脚本,或BAT或.CMD中使用。这个功能可以确保在标准的环境下,使用标准的工具,在不同的Windows系统中以同样的方式工作。它使用了几个标准的和内置的Windows命令。不要使用任何其他外部脚本。它可以用来调用任何程序作为Administrator,不只是脚本Batch。只需创建一个小脚本,然后调用需要权限的程序Administartor即可。

要使用它,你只需在其父Batch脚本中插入以下一行(完全一样),以Administrator的身份运行。这最好是在我们的父脚本的顶部,最好是先通过call进一步调用一些子脚本(见下面的详细解释)。要显示一个消息,而它仍然没有管理员权限,例如,在调用Batch\Admin之前的5秒钟内,设置变量 “ShowAdminInfo "的秒数

net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*

那么它是如何工作的:

  • 通过VBScript调用UAC.ShellExecute。 ShellExecute通过VBScript来拾取用户权限

  • 批量运行该脚本,或BAT或CMD

  • 脚本调用者可以有一个长长的名字空格包含在调用中的引号中

  • 回馈所有的参数调用主脚本从命令行传递过来的参数,就像没有传输的调用,从头开始的东西,也有特殊字符,比如感叹号(! )和百分比(%),也可以用括号()

  • 保留一个主脚本的位置,如果调用发生在这个脚本是主脚本的目录中

  • 如果我们在自己面前设置了变量 "ShowAdminInfo",辅助显示一条消息,例如,5秒钟,可以阻止管理员的权限立即通过,提供额外的信息和知情决定的可能性。必须设置的设置示例。SET ShowAdminInfo=5 默认情况下,因为没有定义这个变量,所以不显示。\Computer\share\test.bat

  • 当脚本几乎同时调用多个Batch_Admin时,防止在编写必要的辅助文件时产生误解。它使用从1到100的随机数

  • 但是,最好是在父脚本上使用。过渡到Administrator权限总是要求你在一个新的窗口中,在一个新的环境中,完全重新运行该脚本,而不求助于之前在我们的脚本中设置的变量,这些变量的值没有通过,然后作为Administrator调用。下面是一个完整的脚本Batch_Admin。

将下面的文本复制到记事本中,并保存到磁盘上。Batch_Admin.bat

SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
1
1
1
2015-11-26 03:54:44 +0000
@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"  
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"  
    "%temp%\getadmin.vbs"  
    exit /B
:gotAdmin  
chkdsk

这个也可以*源码。https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file*

1
1
1
2014-07-28 14:33:06 +0000

或者你可以创建第二个批处理文件,这可以让你以管理员的身份运行任何东西,同时只需要输入一次管理员密码。密码保存在一个认证令牌中,需要一些真正的计算机知识来破解。

0
0
0
2015-11-25 07:07:27 +0000

这是一个以管理员身份运行bat的例子。它对我来说是有效的。

是这样的:

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
)
:eof
start Cmd /k "netsh wlan show profile"
pause </

cls
Color 0A
@echo off
echo.
cls
set/p ProfileName=Type the name of the current Wifi signal? 
echo.
start Cmd /k "netsh wlan show profile name=%ProfileName% key=clear"
pause </
exit
pause
0
0
0
2015-11-11 09:50:46 +0000

你可以使用一个命令行工具 elevate 。(下载链接 - https://drive.google.com/open?id=0Bz7qe_olclTwVGZLUklFMHNxQ00 )

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