Решение Бена Грипки вызывает бесконечные петли. Его партия работает так (псевдокод):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
Как видите, это вызывает бесконечный цикл, если VBS не может запросить права администратора.
Однако может возникнуть бесконечный цикл, хотя права администратора были успешно запрошены.
Проверка в командном файле Бена Грипки просто подвержена ошибкам. Я поиграл с пакетом и заметил, что права администратора доступны, хотя проверка не удалась. Интересно, что проверка работала, как и ожидалось, если я запустил пакетный файл из проводника Windows, но это не так, когда я запустил его из моей IDE.
Поэтому я предлагаю использовать два отдельных пакетных файла. Первый генерирует VBS, который вызывает второй пакетный файл:
@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"
Второй, названный my_commands.bat и расположенный в том же каталоге, что и первый, содержит ваши действительные команды:
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
Это не вызывает бесконечных циклов, а также удаляет подверженную ошибкам проверку привилегий администратора.