Bu Gary'nin cevabını ve Oscar'ın cevabını birleştiriyor . Gary tarafından belirtildiği query sessiongibi , görünüşe göre çıkış
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
veya, benim durumumda (“Kullanıcı değiştir” kullanarak)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(RDP kurulmadı, bu yüzden test edemiyorum.) Muhtemelen sorunun amacı, şu anda aktif olan oturumun kimliğini belirlemektir. query session
Geçerli oturuma benzeyen şeyin çıktısını aramanızı öneririm :
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
bunların her çıktı satırından (biz, [OTURUM] kimliğini ve DEVLET ADI umuyoruz) 2., 3., ve 4. sözcüğü atar query sessioniçin %a, %bve %csırasıyla, ardından çizgi yerden OTURUM kimliği bildiriyor KULLANICI ADI benim, DEVLET benim Active.
query sessionBir usernameparametre alır çıkıyor , böylece yukarıdaki basitleştirilmiş olabilir
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
veya
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Bunu bir komut dosyasında (toplu iş dosyası) kullanmak için şunu söylemek isteyebilirsiniz:
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
kullanarak %%ave %%b(yerine %ave %b) çünkü bir betik içinde. @
Toplu iş dosyasının tamamı altındaysa muhtemelen dışarıda bırakabilirsiniz @echo off. unknownHata işleme yapmanıza olanak tanıyan başlatma (bunun çıktısında çizgi olup olmadığını tespit etme query session
). Hata işlemeyi , çıktısında birden fazla eşleşen satır olup olmadığını tanımak ve tepki vermek için genişletmek query session
bir egzersiz olarak bırakılır.