Dies kombiniert Aspekte von Garys Antwort und Oscars Antwort . Wie von Gary angemerkt, sieht die Ausgabe von query session
in etwa so aus wie
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
oder, in meinem Fall (unter Verwendung von “Benutzer wechseln”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Ich habe kein RDP eingerichtet, daher kann ich nicht damit testen. ) Vermutlich ist die Absicht der Frage, die ID der gerade aktiven Sitzung zu ermitteln. Ich schlage vor, die Ausgabe von query session
nach etwas zu durchsuchen, das wie die aktuelle Sitzung aussieht:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
, was das zweite, dritte und vierte Wort (von dem wir hoffen, dass es der USERNAME, die [SESSION]-ID und STATE ist) aus jeder Zeile der Ausgabe von query session
zu %a
, %b
bzw.%c
zuweist und dann die SESSION-ID aus der Zeile meldet, in der USERNAME ich und STATE Active
ist.
Es stellt sich heraus, dass query session
einen username
-Parameter annimmt, also kann das obige zu
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
oder
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
vereinfacht werden. Um dies in einem Skript (Stapeldatei) zu verwenden, möchten Sie vielleicht
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
sagen, indem Sie %%a
und %%b
(statt %a
und %b
) verwenden, weil es in einem Skript ist. Sie können wahrscheinlich die @
weglassen, wenn die gesamte Batch-Datei unter @echo off
liegt. Die Initialisierung auf unknown
ermöglicht eine Fehlerbehandlung (Erkennung, wenn es in der Ausgabe von query session
keine Zeile gibt, die übereinstimmt). Das Erweitern der Fehlerbehandlung, um zu erkennen und zu reagieren, wenn es mehrere übereinstimmende Zeilen in der Ausgabe von query session
gibt, wird als Übung belassen.