यह गैरी के जवाब और ऑस्कर के जवाब के पहलुओं को जोड़ती है । जैसा कि गैरी ने नोट किया, आउटपुट query sessionकुछ ऐसा दिखता है
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
या, मेरे मामले में ("स्विच उपयोगकर्ता" का उपयोग करके)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(मेरे पास आरडीपी स्थापित नहीं है, इसलिए मैं इसके साथ परीक्षण नहीं कर सकता।) संभवतः प्रश्न का इरादा वर्तमान में सक्रिय सत्र की आईडी निर्धारित करना है। मेरा सुझाव है query session
कि वर्तमान सत्र की तरह लग रहा है के लिए उत्पादन खोज :
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
जो 2nd, 3rd, और 4 शब्द के उत्पादन की प्रत्येक पंक्ति से (जिसे हम USERNAME होने के लिए, [सत्र] आईडी, और राज्य आशा) निर्दिष्ट query sessionकरने के लिए %a, %bऔर %cक्रमशः,, और फिर लाइन जहां से रिपोर्ट सत्र आईडी USERNAME मैं हूँ और राज्य है Active।
यह पता चला है कि query sessionएक usernameपैरामीटर लगता है , इसलिए ऊपर को सरलीकृत किया जा सकता है
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
या
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
स्क्रिप्ट (बैच फ़ाइल) में इसका उपयोग करने के लिए, आप कहना चाह सकते हैं
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
का उपयोग करते हुए %%aऔर %%b(के बजाय %aऔर %b) है क्योंकि यह एक लिपि में है। @
यदि पूरी बैच फ़ाइल है तो आप शायद इसे छोड़ सकते हैं @echo off। आरंभीकरण unknownआपको त्रुटि से निपटने की अनुमति देता है (यह पता लगाने पर कि क्या query session
उस मैच के आउटपुट में कोई रेखा नहीं है )। पहचानने और प्रतिक्रिया करने के लिए त्रुटि-हैंडलिंग का विस्तार अगर वहाँ के आउटपुट में कई मिलान लाइनें हैं, तो query session
व्यायाम के रूप में छोड़ दिया जाता है।