Questo combina aspetti della risposta di Gary e della risposta di Oscar . Come notato da Gary, l'output di query session
sembra qualcosa di simile
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
o, nel mio caso (usando "Cambia utente")
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Non ho RDP impostato, quindi non posso testarlo.) Presumibilmente l'intento della domanda è determinare l'ID della sessione attualmente attiva. Suggerisco di cercare l'output di query session
quella 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 il 2 °, 3 ° e 4 ° di parola (che speriamo di essere il NOME UTENTE, [SESSIONE] ID, e statali) da ogni riga della produzione di query session
a %a
, %b
e %c
, rispettivamente, e poi riporta SESSION ID dalla linea in cui USERNAME sono io e STATE lo è Active
.
Si scopre che query session
accetta un username
parametro, quindi quanto sopra può essere semplificato
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 usarlo 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. Probabilmente puoi tralasciare @
se l'intero file batch è sotto @echo off
. L'inizializzazione unknown
consente di eseguire la gestione degli errori (rilevando se non esiste alcuna riga nell'output di query session
tali corrispondenze). L'estensione della gestione degli errori per riconoscere e reagire se ci sono più righe corrispondenti nell'output di query session
viene lasciata come esercizio.