Nogle gange er det nyttigt at tjekke en batchfil, hvis den blev startet fra en forhøjet kommandoprompt eller som administrator. Jeg vil gerne dele med dig et trick, som jeg bruger til at gøre dette. Hovedidéen til mit trick er baseret på værdien af den specielle miljøvariabel% errorlevel%, der gemmer udgangskoden til de fleste konsolapps og -kommandoer. Lad os se dette i aktion.
Annoncering
Når en konsolapp er færdig med sit job korrekt, gemmer% errrorlevel% variablen 0 som sin værdi.
Åbn en ny kommandopromptinstans og kør kommandoen 'dir'. Derefter skal du udskrive% errorlevel% -værdien ved hjælp af kommandoen 'echo':
dir ekko% fejlniveau%
Det vil producere 0 som output.
Lad os nu prøve at udføre en kommando, der kræver elevation, fra et almindeligt ikke-forhøjet kommandopromptvindue. Lad os for eksempel prøve åbne filer kommando, der kræver administratorrettigheder.
Hvis du udskriver% errorlevel% -værdien, er den ikke 0, fordi kommandoen openfiles ikke viser åbnede filer uden administratorrettigheder.
Men hvis du kører det fra en forhøjet kommandoprompt ( her er hvordan man åbner en admin cmd-prompt ), det viser dig åbnede filer og returnerer 0 som forventet.
Ved hjælp af denne funktion er det muligt at implementere en simpel kontrol i batchfilen:
@echo fra openfiles> NUL 2> & 1 hvis IKKE% ERRORLEVEL% EQU 0 goto NotAdmin echo Hej fra forhøjet kommandoprompt goto End: NotAdmin echo Denne kommandoprompt er IKKE ELEVATED: End
Bemærk, at jeg bruger omdirigering af output til at undertrykke ethvert output fra openfiles-kommandoen. I '> NUL 2> & 1 del' omdirigeres standardoutputtet til kommandoen til intetsteds (NUL), og fejloutputtet omdirigeres til standardoutputtet, dvs. også til NUL.
I stedet for kommandoen openfiles kan du bruge en hvilken som helst kommando, der kræver elevation, for eksempel net session kommando.
Det er det.