Ibland är det bra att checka in en batchfil om den startades från en upphöjd kommandotolk eller som administratör. Jag skulle vilja dela med dig ett trick som jag använder för att göra detta. Huvudidén med mitt trick är baserat på värdet på den speciella miljövariabeln% errorlevel% som lagrar utgångskoden för de flesta konsolappar och kommandon. Låt oss se detta i aktion.
Annons
När någon konsolapp avslutar sitt jobb ordentligt lagrar% errrorlevel% variabel 0 som sitt värde.
Öppna en ny instans för kommandotolken och kör kommandot 'dir'. Därefter skriver du ut% errorlevel% -värdet med kommandot 'echo':
dir eko% felnivå%
Det kommer att producera 0 som utdata.
Låt oss nu försöka utföra ett kommando som kräver höjd, från ett vanligt kommandotolkfönster. Låt oss till exempel prova öppna filer kommando som kräver administratörsrättigheter.
Om du skriver ut% errorlevel% -värdet kommer det inte att vara 0 eftersom kommandot openfiles misslyckas med att visa öppnade filer utan administratörsrättigheter.
Men om du kör den från en upphöjd kommandotolk ( här är hur man öppnar en admin cmd-prompten ), det visar dig öppnade filer och returnerar 0, som förväntat.
Med den här funktionen är det möjligt att implementera en enkel kontroll i batchfilen:
@echo off openfiles> NUL 2> & 1 if NOT% ERRORLEVEL% EQU 0 goto NotAdmin echo Hello from elevated command prompt goto End: NotAdmin echo This command prompt is NOT ELEVATED: End
Observera att jag använder utgående omdirigering för att undertrycka alla utdata från kommandot openfiles. I '> NUL 2> & 1 del' omdirigeras standardutgången för kommandot till ingenstans (NUL) och felutdata omdirigeras till standardutgången, dvs till NUL också.
Istället för openfiles-kommandot kan du använda valfritt kommando som kräver höjning, till exempel nät session kommando.
Det är allt.