是否可以以管理员身份自动运行批处理文件
我想知道是否可以在双击批处理文件时,以管理员身份自动打开批处理文件,因为需要用管理权限来运行命令。
注意:我已经知道右击文件后点击Run As Administrator
的解决方法,但这不是自动解决的。
我想知道是否可以在双击批处理文件时,以管理员身份自动打开批处理文件,因为需要用管理权限来运行命令。
注意:我已经知道右击文件后点击Run As Administrator
的解决方法,但这不是自动解决的。
是的,你可以用管理权限运行一个批处理文件。不幸的是,你不能直接从批处理文件本身做这件事。
要创建一个快捷方式,有很多方法,但最简单、最快的方法是使用上下文菜单中的发送至选项。要将批处理文件提升为管理员身份运行,请按照以下步骤操作。
如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"
:--------------------------------------
接受的答案确实是可以的。但我发现在Windows 7中,每次点击快捷方式时,我都要忍受UAC对话框。这在IMHO中大大减损了这个问题中的 “自动"!
然后我发现,在我自己的情况下,问题中的.bat
文件是要通过任务调度器来运行的。这种情况下,在任务的Run with highest privileges
选项卡上勾选General
选项,很好地解决了这个问题。 还是可以吗?
你可以使用我的脚本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" %*
@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
这是一个以管理员身份运行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
你可以使用一个命令行工具 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