Às vezes, é útil verificar se um arquivo em lote foi iniciado em um prompt de comando elevado ou como um administrador. Gostaria de compartilhar com vocês um truque que estou usando para fazer isso. A ideia principal do meu truque é baseada no valor da variável de ambiente especial% errorlevel% que armazena o código de saída para a maioria dos aplicativos e comandos de console. Vamos ver isso em ação.
Propaganda
Quando algum aplicativo de console termina seu trabalho corretamente, a variável% errrorlevel% armazena 0 como seu valor.
Abra uma nova instância do prompt de comando e execute o comando 'dir'. Depois disso, imprima o valor% errorlevel% usando o comando 'echo':
dir echo% errorlevel%
Ele produzirá 0 como saída.
Agora, vamos tentar executar um comando que requer elevação, a partir de uma janela de prompt de comando normal não elevada. Por exemplo, vamos tentar o Abrir arquivos comando que requer direitos de administrador.
Se você imprimir o valor% errorlevel%, ele não será 0 porque o comando openfiles não mostrará os arquivos abertos sem direitos de administrador.
No entanto, se você executá-lo em um prompt de comando elevado ( aqui está como abrir um prompt de cmd de administração ), ele mostrará os arquivos abertos e retornará 0, conforme o esperado.
Usando este recurso, é possível implementar uma verificação simples no arquivo batch:
@echo off openfiles> NUL 2> & 1 if NOT% ERRORLEVEL% EQU 0 goto NotAdmin echo Hello do prompt de comando elevado goto End: NotAdmin echo Este prompt de comando NÃO ESTÁ ELEVADO: End
Observe que eu uso o redirecionamento de saída para suprimir qualquer saída do comando openfiles. Na parte '> NUL 2> & 1', a saída padrão do comando é redirecionada para lugar nenhum (NUL), e a saída de erro é redirecionada para a saída padrão, ou seja, também para NUL.
Em vez do comando openfiles, você pode usar qualquer comando que requeira elevação, por exemplo, o sessão de rede comando.
É isso aí.