Questo combina aspetti di risposta di Gary e risposta di Oscar . Come notato da Gary, l'output di query session
sembra qualcosa come
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
o, nel mio caso (usando “Switch user”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(non ho RDP impostato, quindi non posso provare con esso. ) Presumibilmente l'intento della domanda è quello di determinare l'ID della sessione attualmente attiva. Suggerisco di cercare nell'output di query session
quello che sembra la sessione corrente:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
che assegna la seconda, terza e quarta parola (che speriamo siano USERNAME, [SESSION] ID, e STATE) da ogni linea dell'output di query session
a %a
, %b
, e%c
, rispettivamente, e poi riporta SESSION ID dalla linea dove USERNAME è io e STATE è Active
.
Si scopre che query session
prende un parametro username
, quindi quanto sopra può essere semplificato in
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
o
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Per usare questo in uno script (file batch), potresti voler dire
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
usando %%a
e %%b
(invece di %a
e %b
) perché è in uno script. Si può probabilmente tralasciare lo @
se l'intero file batch è sotto @echo off
. L'inizializzazione a unknown
ti permette di fare la gestione degli errori (rilevando se non c'è nessuna linea nell'output di query session
che corrisponde). Estendere la gestione degli errori per riconoscere e reagire se ci sono multiple linee corrispondenti nell'output di query session
è lasciato come esercizio.