我想知道当您双击该批处理文件时是否可以以管理员身份自动打开该批处理文件,因为这些命令需要以管理权限运行。
注意:我已经知道右键单击文件并单击Run As Administrator
的解决方案,但这不是自动解决方案。
我想知道当您双击该批处理文件时是否可以以管理员身份自动打开该批处理文件,因为这些命令需要以管理权限运行。
注意:我已经知道右键单击文件并单击Run As Administrator
的解决方案,但这不是自动解决方案。
Answers:
是的,您可以运行具有管理权限的批处理文件。不幸的是,您不能直接从自身的批处理文件中执行此操作。您首先需要创建该批处理文件的快捷方式,然后更改该快捷方式的属性才能执行此操作。
要创建快捷方式,有很多方法,但是最简单和最快的方法是使用上下文菜单中的“ 发送到”选项。
Right click batch file > Send to > Desktop (create shortcut)
当然,您可以将快捷方式发送到您想要的任何位置。要提升批处理文件以admin身份运行,请按照以下步骤操作:
if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOF
下方插入类似内容@echo off
,然后将其链接到program.bat a
而不是just program.bat
。
正如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对话框。这个恕我直言,大大降低了“自动”这个问题!
然后我发现在我自己的情况下,有.bat
问题的文件将由Task Scheduler运行。在这种情况下,检查任务选项卡Run with highest privileges
上的General
选项可以很好地解决问题。.bat
然后,该程序将以管理员身份运行而没有任何麻烦。
PS:我没意识到我无法在此答案上载图片,因为现在我身边有一个漂亮的小屏幕截图!可以吗
在Windows 7上
创建该批处理文件的快捷方式
右键单击快捷方式文件
单击高级按钮以查找以管理员身份运行的复选框
检查以下屏幕截图
您可以使用我的脚本Batch_Admin自动将管理员提升为可在任何类型的批处理自身脚本,BAT或.CMD中使用。此功能可确保在标准环境中使用标准工具在不同Windows系统中以相同方式进行工作。它使用几个标准的内置Windows命令。不要使用任何其他外部脚本。它可以用来以管理员身份调用任何程序,而不仅仅是脚本Batch。创建一个小的脚本即可,然后调用需要权限Administartor的程序。将此放置在任何搜索PATH文件夹中(来自%PATH%)。
要使用它,您只需在其父批脚本中插入以下行(完全相同)即可,该脚本将以管理员身份运行。最好在父脚本的顶部完成此操作,最好是先进行此操作,然后再通过CALL调用一些子脚本(请参见下面的详细说明)。
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
可以将其插入任何由CALL语法调用的子脚本中。在消息仍然显示时不具有管理员权限,例如。调用Batch_Admin之前的5秒钟,将变量“ ShowAdminInfo”设置为秒数
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
•通过VBScript调用UAC.ShellExecute以获取用户权限
•批处理运行脚本,或者BAT或CMD
•脚本调用方的引号中可以包含长名称空间
•退回从命令行传递来的主脚本调用的所有参数,就好像没有传输调用并从头开始一样,还带有特殊字符,例如感叹号(!)和百分比(%),以及带括号()
•如果呼叫发生在主脚本所在的目录中,则保存主脚本位置
•如果我们在自己之前设置变量“ ShowAdminInfo”,则辅助显示一条消息,例如。持续5秒钟,这可能会阻止管理员立即提供附加信息以及做出明智决定的权利。必须设置的设置示例:SET ShowAdminInfo = 5默认情况下,由于未定义此变量,因此不会显示。
•该脚本还在系统搜索路径%PATH%中以及从网络资源中调用,例如:\ Computer \ share \ test.bat
•防止在脚本几乎同时调用多个Batch_Admin时编写必要的辅助文件时产生误解。它使用1到100之间的随机数
•但是,最好是在父脚本上使用它。过渡到管理员权限始终要求您在新窗口,新环境中完全重新运行脚本,而不必求助于先前在脚本中设置的变量,并且这些变量的值没有传递,然后以管理员身份调用。只是脚本将再次执行。
在完整的脚本Batch_Admin下面。有关此内容的更多信息,请访问我的网站。
将以下文本复制到记事本中,并将其另存为:Batch_Admin.bat
@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)
:: A D M I N I S T R A T O R - Automatically get admin rights for script batch. Paste this on top: net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
:: Also keep Batch directory localisation and then set variable: PATH_BAT
:: if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
:: Elaboration: Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion
SET "Localy="
if exist "%~1" SET "Localy=YES"
if exist "%~1.BAT" SET "Localy=YES"
if exist "%~1.CMD" SET "Localy=YES"
if defined Localy FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"
SET P1=%~1
SET Parameters=%*
SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
SET Parameters=!Parameters:%P1%=!
SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
SET Parameters=%Parameters:~3%
net session >nul 2>nul&if not errorlevel 1 goto Administrator_OK
if not defined ShowAdminInfo goto skip_message_Administrator
echo.
echo Script: %~1
echo.
echo *****************************************************************
echo *** R U N N I N G A S A D M I N I S T R A T O R ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo shortcut ^> Advanced ^> Running as Administrator
echo.
echo Alternatively run once "As Administrator"
echo or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch %ShowAdminInfo% seconds ...
TIMEOUT /T %ShowAdminInfo% > nul
:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1
SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat" SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo @SET "PATH_BAT=%PATH_BAT%" > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B
:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R - Automatically get admin rights (The End) ***
@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
您可以使用命令行实用程序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
这是一个以管理员身份运行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