Можно ли автоматически запустить пакетный файл от имени администратора?

Можно ли автоматически запустить пакетный файл от имени администратора?

Мне интересно, возможно лиавтоматическиоткройте пакетный файл от имени администратора, дважды щелкнув по нему, поскольку команды необходимо запускать с правами администратора.

Примечание: я уже знаю о решении, которое заключается в щелчке правой кнопкой мыши по файлу и выборе Run As Administrator, но это не автоматическое решение.

решение1

Да, вы можете запустить пакетный файл с правами администратора. К сожалению, вы не можете сделать это непосредственно из самого пакетного файла. Вам сначала нужно будет создать ярлык этого пакетного файла и изменить свойства этого ярлыка, чтобы это заработало.

Чтобы создать ярлык, есть много способов, но самый простой и быстрый способ — использоватьОтправитьопция в контекстном меню.

Right click batch file > Send to > Desktop (create shortcut)

Конечно, вы можете отправить ярлык куда угодно. Чтобы повысить права пакетного файла для запуска от имени администратора, выполните следующие действия:

  1. Щелкните правой кнопкой мыши ярлык, который вы только что создали (он должен находиться на рабочем столе или в том месте, куда вы его отправите), и выберите «Свойства».
  2. На вкладке «Ярлык» нажмите кнопку «Дополнительно...».
  3. Установите флажок Запуск от имени администратора и нажмите кнопку ОК как в модальном окне, так и в главном окне свойств.
  4. Запустите ярлык, дважды щелкнув по нему, и пакетный файл должен запуститься от имени администратора.

решение2

Как опубликовано вОтветБен Грипка на другой вопрос:

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

  1. Создайте ярлык для этого пакетного файла.

  2. Щелкните правой кнопкой мыши по файлу ярлыка.

  3. Нажмитекнопка продвижениянайти флажок для запуска от имени администратора

Посмотрите на скриншот ниже.

Скриншот

решение4

Вы можете использовать мой скрипт Batch_Admin для автоматического повышения прав Администратора для использования в любом типе собственного скрипта Batch, или BAT или .CMD. Эта функция обеспечивает работу в стандартной среде, со стандартными инструментами и таким же образом в различных системах Windows. Он использует несколько стандартных и встроенных команд Windows. Не используйте никаких других внешних скриптов. Его можно использовать для вызова любой программы в качестве Администратора, а не только скриптов Batch. Достаточно создать небольшой скрипт, который затем вызовет программу, требующую разрешения Администратор. Поместите это в любую папку PATH поиска (из %PATH%).

Чтобы использовать его, вы просто вставляете следующую строку (точно так же) в его родительский скрипт Batch, который должен быть запущен от имени администратора. Лучше всего это сделать в верхней части нашего родительского скрипта, и лучше всего сначала, который будет вызываться через CALL далее, некоторые подскрипты (см. подробное объяснение ниже).

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

Это может быть вставлено в любой дочерний скрипт, вызываемый синтаксисом CALL. Чтобы отобразить сообщение, пока оно еще не имеет привилегий администратора, например, за 5 секунд до вызова Batch_Admin, установите переменную "ShowAdminInfo" на количество секунд

SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

Итак, как это работает:

• Вызывает UAC.ShellExecute через VBScript для получения разрешений пользователя

• Пакетный запуск скрипта, 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)  ***

Связанный контент