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.