Es ist nicht so kompakt wie die Methode, die Sie verwenden, aber eine andere Methode, die ich benutzt habe erfolgreich zahlreiche Male in der Vergangenheit ist wie folgt:
IF EXIST %SYSTEMROOT%\SYSTEM32\WDI\LOGFILES GOTO GOTADMIN
[Whatever commands you want to run if not running as admin]
:GOTADMIN
[Whatever commands you want to run if running as admin]
Das funktioniert, weil in der Standardeinstellung nur Windows erlaubt Zugriff auf das WDI-Verzeichnis mit erhöhten Berechtigungen. Wenn Sie dem Skript also mitteilen, dass es in diesem Verzeichnis nach einem anderen Verzeichnis suchen soll, das vorhanden sein soll, kann es verwendet werden, um festzustellen, ob es als Administrator ausgeführt wird oder nicht. Wenn ja, wird LOGFILES angezeigt und True zurückgegeben. Wenn dies nicht der Fall ist, wird der Zugriff auf die WDI-Dateien nicht zugelassen. Daher wird LOGFILES nicht erkannt und False zurückgegeben.
Zugegebenermaßen funktioniert dies nur, wenn die Standardsicherheitsberechtigungen für das WDI-Verzeichnis nicht geändert wurden, aber aus meiner Erfahrung ist es sehr unwahrscheinlich, dass diese Berechtigungen in den meisten Installationen geändert wurden. Es erfordert auch, dass das LOGFILES-Verzeichnis innerhalb des WDI-Verzeichnisses nicht gelöscht oder umbenannt wurde, aber ich halte dies für sehr unwahrscheinlich, da es ein integraler Bestandteil des Zwecks des WDI-Verzeichnisses ist.
Ich habe getestet und bestätigt, dass es unter Windows 7, 8, 8.1 und 10 funktioniert. Ich habe es nicht auf Vista getestet, aber ich würde davon ausgehen, dass es funktioniert, weil Vista zu 7 ähnlich ist Verwenden Sie diese Methode unter XP, da alle Eingabeaufforderungen standardmäßig in dieser Version von Windows mit maximaler Höhe ausgeführt werden.
Nichts ist falsch mit den Befehlen, die Sie zeigen, das Problem liegt woanders. Ich würde bedingte Ausführung statt Errorlevel-Prüfung 'openfiles> nul 2> & 1 || verwenden was auch immer " – LotPings
Danke für die Antwort, ich habe versucht, aber es ist das Gleiche. –
Das Problem ist immer noch woanders im Code, den Sie nicht zeigen. Mein Hinweis war nicht mit dem Problem verbunden. Bitte lesen Sie, was ein [MCVE] ist. – LotPings