La soluzione di Ben Gripka provoca loop infiniti. Il suo batch funziona in questo modo (pseudo codice):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
Come puoi vedere, questo provoca un ciclo infinito, se VBS non riesce a richiedere i privilegi di amministratore.
Tuttavia, può verificarsi il ciclo infinito, sebbene i privilegi di amministratore siano stati richiesti correttamente.
Il controllo nel file batch di Ben Gripka è solo soggetto a errori. Ho giocato con il batch e ho osservato che i privilegi di amministratore sono disponibili anche se il controllo non è riuscito. È interessante notare che il controllo ha funzionato come previsto, se avessi avviato il file batch da Windows Explorer, ma non quando l'ho avviato dal mio IDE.
Quindi suggerisco di usare due file batch separati. Il primo genera il VBS che chiama il secondo file batch:
@echo off
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~dp0\my_commands.bat"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
Il secondo, chiamato "my_commands.bat" e situato nella stessa directory del primo contiene i tuoi comandi attuali:
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
Ciò non provoca loop infiniti e rimuove anche il controllo dei privilegi di amministratore soggetto a errori.