Иногда полезно проверить командный файл, был ли он запущен из командной строки с повышенными привилегиями или от имени администратора. Я хотел бы поделиться с вами уловкой, которую я использую для этого. Основная идея моего трюка основана на значении специальной переменной окружения% errorlevel%, в которой хранится код выхода для большинства консольных приложений и команд. Давайте посмотрим на это в действии.
Реклама
Когда какое-либо консольное приложение правильно завершает свою работу, переменная% errrorlevel% сохраняет в качестве своего значения 0.
Откройте новый экземпляр командной строки и запустите команду dir. После этого распечатайте значение% errorlevel% с помощью команды echo:
dir echo% errorlevel%
На выходе будет 0.
Теперь давайте попробуем выполнить команду, требующую повышения прав, из обычного окна командной строки без повышенных прав. Например, давайте попробуем открытые файлы команда, требующая прав администратора.
Если вы напечатаете значение% errorlevel%, оно не будет равно 0, потому что команда openfiles не сможет показать открытые файлы без прав администратора.
Однако, если вы запустите его из командной строки с повышенными привилегиями ( вот как открыть командную строку администратора ), он покажет вам открытые файлы и вернет 0, как и ожидалось.
Используя эту функцию, можно реализовать простую проверку в командном файле:
@echo off openfiles> NUL 2> & 1 if NOT% ERRORLEVEL% EQU 0 goto NotAdmin echo Привет из командной строки с повышенными привилегиями goto End: NotAdmin echo Эта командная строка НЕ ПОДНИМАЕТСЯ: End
Обратите внимание, что я использую перенаправление вывода, чтобы подавить любой вывод команды openfiles. В части '> NUL 2> & 1' вывод команды по умолчанию перенаправляется в никуда (NUL), а вывод ошибки перенаправляется на стандартный вывод, то есть также на NUL.
Вместо команды openfiles вы можете использовать любую команду, требующую повышения прав, например, чистая сессия команда.
Вот и все.