Você pode aproveitar o PowerShell, presente em todos os sistemas Windows modernos.
Divida os comandos que precisam de elevação em um arquivo de lote separado, por exemplo, %código%. Então, quando for a hora de executá-los, use isso em seu script não elevado:
powershell -command "Start-Process elevated.bat -Verb runas"
A parte elevated.bat
é o que causa o prompt de elevação. Se o arquivo de lote original já estiver sendo executado como administrador ou se os prompts do UAC estiverem desativados, o novo arquivo será elevado sem um prompt.
Observe que o diretório atual do processador em lote elevado será iniciado como -Verb runas
. Se isso for um problema, você pode usar essa versão alternativa para que ela seja iniciada no mesmo diretório que o script não elevado:
powershell -command "Start-Process cmd -ArgumentList '/c %CD% && elevated.bat' -Verb runas"
Isso faz com que a nova System32
instance seja primeiro cmd
no diretório fornecido pela variável cd
do prompt não-gerado e execute o arquivo de lote desejado.