To łączy aspekty odpowiedzi Gary'ego i odpowiedzi Oscara . Jak zauważył Gary, produkcja query sessionwygląda podobnie
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
lub, w moim przypadku (używając „Przełącz użytkownika”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Nie mam skonfigurowanego protokołu RDP, więc nie mogę go przetestować.) Prawdopodobnie celem tego pytania jest określenie identyfikatora aktualnie aktywnej sesji. Sugeruję przeszukanie danych wyjściowych query session
czegoś, co wygląda jak bieżąca sesja:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
który przypisuje 2, 3 i 4 słowa (które mamy nadzieję, że nazwa użytkownika [SESJA] ID i stan) z każdej linii wyjścia query sessiondo %a, %bi %c, odpowiednio, a następnie informuje Session ID z linii, gdzie USERNAME to ja, a STATE to Active.
Okazuje się, że query sessionwymaga usernameparametru, więc powyższe można uprościć
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
lub
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Aby użyć tego w skrypcie (plik wsadowy), możesz powiedzieć
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
używając %%ai %%b(zamiast %ai %b), ponieważ jest w skrypcie. Prawdopodobnie możesz pominąć, @
jeśli cały plik wsadowy jest poniżej @echo off. Inicjalizacja do unknownpozwala na obsługę błędów (wykrywanie, czy nie ma linii na wyjściu query session
tego dopasowania). Rozszerzenie obsługi błędów w celu rozpoznawania i reagowania, jeśli na wyjściu
jest wiele pasujących linii, query sessionpozostawia się jako ćwiczenie.