Dit combineert aspecten van Gary’s antwoord en Oscar’s antwoord . Zoals opgemerkt door Gary, ziet de uitvoer van query session
er ongeveer zo uit als
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
of, in mijn geval (met behulp van “Switch user”)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Ik heb RDP niet ingesteld, dus ik kan er niet mee testen. ) Vermoedelijk is de bedoeling van de vraag om de ID van de huidige actieve sessie te bepalen. Ik stel voor om in de uitvoer van query session
te zoeken naar wat lijkt op de huidige sessie:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
die het 2e, 3e en 4e woord (waarvan we hopen dat het de USERNAME, [SESSION] ID, en STATE zijn) van elke regel van de uitvoer van query session
toewijst aan respectievelijk %a
, %b
, en%c
, en dan SESSION ID rapporteert van de regel waar USERNAME me is en STATE Active
is.
Het blijkt dat query session
een username
parameter neemt, dus het bovenstaande kan vereenvoudigd worden tot
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
of
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Om dit in een script (batch file) te gebruiken, zou je misschien willen zeggen
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
met behulp van %%a
en %%b
(in plaats van %a
en %b
) omdat het in een script staat. Je kunt de @
waarschijnlijk weglaten als het hele batch-bestand onder @echo off
staat. De initialisatie naar unknown
laat je foutafhandeling doen (detecteren of er geen regel is in de uitvoer van query session
die overeenkomt). Het uitbreiden van de foutafhandeling om te herkennen en te reageren als er meerdere overeenkomende regels zijn in de uitvoer van query session
wordt als een oefening overgelaten.