Manchmal ist es hilfreich, eine Batchdatei einzuchecken, wenn sie an einer Eingabeaufforderung mit erhöhten Rechten oder als Administrator gestartet wurde. Ich möchte Ihnen einen Trick mitteilen, mit dem ich dies tue. Die Hauptidee meines Tricks basiert auf dem Wert der speziellen Umgebungsvariablen% errorlevel%, in der der Exit-Code für die meisten Konsolen-Apps und -Befehle gespeichert ist. Lassen Sie uns dies in Aktion sehen.
Werbung
Wenn eine Konsolen-App ihren Job ordnungsgemäß beendet, speichert die Variable% errrorlevel% 0 als Wert.
Öffnen Sie eine neue Eingabeaufforderungsinstanz und führen Sie den Befehl 'dir' aus. Danach drucken Sie den% errorlevel% -Wert mit dem Befehl 'echo':
dir echo% errorlevel%
Es wird 0 als Ausgabe erzeugt.
Versuchen wir nun, einen Befehl, für den eine Erhöhung erforderlich ist, über ein reguläres nicht erhöhtes Eingabeaufforderungsfenster auszuführen. Versuchen wir zum Beispiel das offene Dateien Befehl, der Administratorrechte erfordert.
Wenn Sie den Wert% errorlevel% drucken, ist er nicht 0, da der Befehl openfiles geöffnete Dateien ohne Administratorrechte nicht anzeigt.
Wenn Sie es jedoch an einer Eingabeaufforderung mit erhöhten Rechten ausführen ( Hier erfahren Sie, wie Sie eine Admin-Cmd-Eingabeaufforderung öffnen ) zeigt es Ihnen geöffnete Dateien an und gibt erwartungsgemäß 0 zurück.
Mit dieser Funktion ist es möglich, eine einfache Überprüfung in der Batchdatei durchzuführen:
@echo off openfiles> NUL 2> & 1 wenn NICHT% ERRORLEVEL% EQU 0 gehe zu NotAdmin echo Hallo von der erhöhten Eingabeaufforderung gehe zu Ende: NotAdmin echo Diese Eingabeaufforderung ist NICHT ERHÖHT: Ende
Beachten Sie, dass ich die Ausgabeumleitung verwende, um die Ausgabe des Befehls openfiles zu unterdrücken. Im Teil '> NUL 2> & 1' wird die Standardausgabe des Befehls nach nirgendwo (NUL) umgeleitet, und die Fehlerausgabe wird zur Standardausgabe umgeleitet, d. H. Auch zu NUL.
Anstelle des Befehls openfiles können Sie jeden Befehl verwenden, für den eine Erhöhung erforderlich ist, z Netzsitzung Befehl.
Das ist es.