Вы можете использовать мой скрипт Batch_Admin для автоматического повышения Администратора для использования в любом типе пакетного собственного скрипта, или 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)***