Você pode usar meu script Batch_Admin para elevar automaticamente o Administrador para uso em qualquer tipo de script próprio do Batch, ou BAT ou .CMD. Esta 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 de lote. Basta criar um pequeno script, que então 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 Batch 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 (veja a explicação detalhada abaixo).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Isso pode ser inserido dentro de qualquer script filho, chamado pela sintaxe CALL.
Para exibir uma mensagem enquanto ainda é não tem privilégios de administrador, por exemplo. por 5 segundos antes de chamar Batch_Admin definir 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 o UAC.ShellExecute através do VBScript para obter permissões de usuário
• O lote executa o script, ou BAT ou CMD
• O chamador de script pode ter espaços de nomes longos incluídos na chamada entre aspas
• Devolve todos os parâmetros chama o script mestre passado da linha de comando, como se não houvesse transmissão da chamada e inicie algo do zero, também com caracteres especiais, como pontos de exclamação (!) e porcentagem (%) e também com parênteses ()
• Mantém um local de script mestre se a chamada ocorreu no diretório onde este script é o mestre
• Auxiliar exibe uma mensagem se definirmos antes de nós a variável "ShowAdminInfo", por exemplo. por 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 configuração que devem ser definidos: 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 do recurso 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. Usa o número aleatório de 1 a 100
• Mas o melhor é usá-lo no script pai. A transição para 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 passam então 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 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) ***