Você sempre pode fazer algo assim
mkdir "%windir%\system32\test" 2>nul
if "%errorlevel%" == "0" (rmdir "%windir%\system32\test" & echo Is admin) else (echo Not an Admin)
Não é a melhor das maneiras, mas funciona para mim o tempo todo.
Como posso verificar se o script em lote atual tem direitos de administrador?
Eu sei como chamar a si mesmo com runas, mas não como verificar os direitos de administrador. As únicas soluções que vi são trabalhos de hackeamento brutos.
Após algumas pesquisas (principalmente em SO [1] ), descobri que net
nem sempre é uma boa solução, pode mostrar resultados falsos negativos. Mas há fsutil
disponível para o WinXP para o Win10. Vale a pena ler toda a resposta perspicaz "Mais problemas" à questão script em lote: como verificar os direitos de administrador lá.
Esta é a resposta curta para usuários apressados:
fsutil dirty query %systemdrive% >nul
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Running without
)
[1] meu problema real foi elevação, mas verificação não invasiva é parte disso:
Este é o melhor kludge em que eu consegui pensar, usando comandos padrão:
net user %username% | findstr /r Administrator.
if %errorlevel% == 1 (
echo This is not an admin account
) else (
echo This is an admin account
)
Você só precisa desta linha no topo de seus lotes que exigem elevação. ênfase em "One Line"
nul 2>&1 fsutil dirty query %systemdrive% || echo CreateObject^("Shell.Application"^).ShellExecute "%~0", "ELEVATED", "", "runas", 1 > "getadmin.vbs" && "getadmin.vbs" && exit /b