Cela combine des aspects de réponse de Gary et réponse d'Oscar .  ; Comme l'a noté Gary, la sortie de query session
ressemble à
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
ou, dans mon cas (en utilisant “Switch user”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Je n'ai pas configuré RDP, donc je ne peux pas tester avec. )  ; On peut supposer que l'objectif de la question est de déterminer l'identifiant de la session actuellement active.   ; Je suggère de chercher dans la sortie de query session
ce qui ressemble à la session actuelle :
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
qui assigne le 2ème, 3ème et 4ème mot (que nous espérons être le USERNAME, [SESSION] ID, et STATE) de chaque ligne de la sortie de query session
à %a
, %b
, et%c
, respectivement, et ensuite rapporte le SESSION ID de la ligne où USERNAME est moi et STATE est Active
.
Il s'avère que query session
prend un paramètre username
, donc ce qui précède peut être simplifié en
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
ou
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Pour l'utiliser dans un script (fichier batch), vous pourriez 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
en utilisant %%a
et %%b
(au lieu de %a
et %b
) parce que c'est dans un script.   ; Vous pouvez probablement omettre le @
si tout le fichier du lot est sous @echo off
. L'initialisation à unknown
vous permet de faire du traitement d'erreur (détecter s'il n'y a pas de ligne dans la sortie de query session
qui correspond).  ; Extension du traitement d'erreur pour reconnaître et réagir s'il y a multiple lignes correspondantes dans la sortie de query session
is laissée comme exercice.