Pode utilizar o meu script Batch_Admin para elevar automaticamente o Administrador para utilização em qualquer tipo de script próprio Batch, ou BAT ou .CMD. Esta função assegura o trabalho num ambiente standard, com ferramentas standard e da mesma forma em diferentes sistemas Windows. Utiliza vários comandos padrão e embutidos no Windows. Não utilize nenhum outro script externo. Pode ser usado para chamar qualquer programa como Administrador, e não apenas scripts Batch. Basta criar um pequeno script, que depois chama o programa que requer permissão Administartor. Coloque isto em qualquer pasta PATH de pesquisa (de %PATH%).
Para o utilizar, basta inserir a seguinte linha (exactamente como) no seu Batch script pai, que deve ser executado como Administrador. Isto é melhor feito no topo do nosso script pai e é melhor que primeiro, que será chamado através do CALL, alguns sub-scripts (ver explicação detalhada abaixo).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Isto pode ser inserido dentro de qualquer script filho, chamado pela sintaxe CALL. Para mostrar uma mensagem enquanto ainda não tem privilégios de Administrador, por exemplo, durante 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 a UAC. ShellExecute através de VBScript para captar as permissões de utilizador
Batch executa o script, ou BAT ou CMD
Script chamador pode ter um longo espaço de nome incluído na chamada entre aspas
Devolve todos os parâmetros de chamada do script mestre passado a partir da linha de comando, como se não houvesse transmissão da chamada e inicia algo do zero, também com caracteres especiais, como pontos de exclamação (! ) e percentagem (%), e também com parênteses ()
Guarda uma localização do script mestre se a chamada ocorreu no directório onde este script é o mestre
Auxiliar exibe uma mensagem se colocarmos à nossa frente a variável “ShowAdminInfo”, por exemplo, durante 5 segundos o que pode impedir a passagem imediata dos direitos do Administrador dando informações adicionais e a possibilidade de uma decisão informada. Exemplos de definição que devem ser definidos: SET ShowAdminInfo=5 Por defeito, porque esta variável não está definida, não é exibida.
O script está a chamar também no caminho de pesquisa do sistema % PATH% e de recurso da rede, como por exemplo: \Computer\share\test.bat
Evita mal-entendidos na escrita dos ficheiros 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 requer sempre que se execute o script completamente novamente, numa nova janela, num novo ambiente, sem recorrer às variáveis previamente definidas no nosso script e os valores destas variáveis não passaram então para chamar como Administrador. Apenas o script será executado novamente.
Abaixo um script completo Batch_Admin. Informação detalhada sobre isto está no meu site.
Copie o seguinte texto para o Bloco de Notas e guarde-o no 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)***