我想知道是否有可能自动地双击批处理文件时以管理员身份打开批处理文件,因为命令需要以管理员权限运行。
注意:我已经知道右键单击文件并单击的解决方案Run As Administrator
,但这不是自动解决方案。
答案1
是的,您可以用管理员权限运行批处理文件。遗憾的是,您不能直接从批处理文件本身执行此操作。您需要先创建该批处理文件的快捷方式并更改该快捷方式的属性才能使其正常工作。
要创建快捷方式,有很多方法,但最简单、最快捷的方法是使用发给上下文菜单中的选项。
Right click batch file > Send to > Desktop (create shortcut)
当然,您可以将快捷方式发送到您想要的任何地方。要提升批处理文件以管理员身份运行,请按照以下步骤操作:
- 右键单击刚刚创建的快捷方式(应该在桌面上或您发送的位置),然后选择“属性”
- 在快捷方式选项卡下,单击高级...按钮。
- 选中以管理员身份运行复选框,然后按“模式窗口”和“主属性窗口”的“确定”。
- 双击运行快捷方式,批处理文件应以管理员身份运行。
答案2
正如发布于一个答案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"
:--------------------------------------
答案3
在 Windows 7 上
创建该批处理文件的快捷方式
右键单击快捷方式文件
点击前进按钮找到以管理员身份运行的复选框
查看下面的截图
答案4
您可以使用我的脚本 Batch_Admin 自动提升管理员权限,以便在任何类型的批处理脚本、BAT 或 .CMD 中使用。此功能可确保在标准环境中使用标准工具并以相同的方式在不同的 Windows 系统中工作。它使用几个标准和内置的 Windows 命令。不要使用任何其他外部脚本。它可用于以管理员身份调用任何程序,而不仅仅是批处理脚本。只需创建一个小脚本,然后调用需要权限的程序即可。将其放在任何搜索 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) ***