Você pode usar meu script Batch_Admin para elevar automaticamente o Administrador para uso em qualquer tipo de script próprio do Lote, ou BAT ou .CMD. Essa função garante o trabalho em um ambiente padrão, com ferramentas padrão e da mesma maneira em diferentes sistemas Windows. Ele usa vários comandos padrão e internos do Windows. Não use outros scripts externos. Ele pode ser usado para chamar qualquer programa como administrador, não apenas scripts como lote. Basta criar um pequeno script, que chama o programa que requer permissão Administartor. Coloque isso em qualquer pasta PATH de pesquisa (de% PATH%).
Para usá-lo, basta inserir a seguinte linha (exatamente como) em seu script de Lote pai, que deve ser executado como Administrador. É melhor fazer isso na parte superior do script pai e é melhor que primeiro, que será chamado ainda mais através do CALL, alguns sub-scripts (veja a explicação detalhada abaixo).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Isso pode ser inserido em qualquer script filho, chamado pela sintaxe CALL. Para exibir uma mensagem enquanto ela ainda não possui privilégios de administrador, por exemplo. por 5 segundos antes de chamar Batch_Admin, defina a variável "ShowAdminInfo" no número de segundos
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Então, como funciona:
• Chama UAC.ShellExecute por meio do VBScript para obter permissões de usuário
• Lote executa o script, ou BAT ou CMD
• O chamador de script pode ter um espaço de nome longo incluído na chamada entre aspas
• Devolva todos os parâmetros de chamada que o script mestre passou na linha de comando, como se não houvesse transmissão da chamada e iniciasse algo do zero, também com caracteres especiais, como pontos de exclamação (!) E porcentagem (%), e também entre parênteses ()
• Mantém um local de script mestre se a chamada ocorreu no diretório em que esse script é o mestre
• Auxiliar exibe uma mensagem se definirmos a variável "ShowAdminInfo", por exemplo. por 5 segundos, o que pode impedir a passagem imediata dos direitos do administrador, fornecendo informações adicionais e a possibilidade de uma decisão informada. Exemplos de configurações que devem ser definidas: SET ShowAdminInfo = 5 Por padrão, como essa variável não está definida, ela não é exibida.
• O script também está chamando no caminho de pesquisa do sistema% PATH% e a partir de recursos de rede, como: \ Computer \ share \ test.bat
• Evita mal-entendidos ao escrever os arquivos auxiliares necessários quando o script chama vários Batch_Admin quase ao mesmo tempo. Ele usa o número aleatório de 1 a 100
• Mas o melhor é usá-lo no script pai. A transição para os direitos de administrador sempre exige que você execute o script completamente novamente, em uma nova janela, em um novo ambiente, sem recorrer às variáveis definidas anteriormente em nosso script e os valores dessas variáveis não passaram depois para chamar como administrador . Apenas o script será executado novamente.
Abaixo de um script completo Batch_Admin. Informações estendidas sobre isso estão no meu site.
Copie o seguinte texto no Bloco de Notas e salve-o em disco como: 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) ***