Bu Gary'nin cevabını ve Oscar'ın cevabını birleştiriyor . Gary tarafından belirtildiği query session
gibi , 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 session
için %a
, %b
ve %c
sırasıyla, ardından çizgi yerden OTURUM kimliği bildiriyor KULLANICI ADI benim, DEVLET benim Active
.
query session
Bir username
parametre 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 %%a
ve %%b
(yerine %a
ve %b
) çünkü bir betik içinde. @
Toplu iş dosyasının tamamı altındaysa muhtemelen dışarıda bırakabilirsiniz @echo off
. unknown
Hata 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.