Điều này kết hợp các khía cạnh của câu trả lời của Gary và câu trả lời của Oscar . Theo ghi nhận của Gary, đầu ra của nó query session
trông giống như
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
hoặc, trong trường hợp của tôi (sử dụng người dùng trên Switch Switch)
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
(Tôi chưa thiết lập RDP, vì vậy tôi không thể kiểm tra với nó.) Có lẽ mục đích của câu hỏi là xác định ID của phiên hiện đang hoạt động. Tôi đề nghị tìm kiếm đầu ra của query session
phiên trông giống như phiên hiện tại:
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
mà giao cho 2, 3, và từ lần thứ 4 (mà chúng tôi hy vọng sẽ là USERNAME, [PHIÊN] ID, và NHÀ NƯỚC) từ mỗi dòng đầu ra của query session
để %a
, %b
và %c
, tương ứng, và sau đó báo cáo PHẦN ID từ dòng nơi USERNAME là tôi và NHÀ NƯỚC là Active
.
Nó chỉ ra rằng query session
có một username
tham số, vì vậy ở trên có thể được đơn giản hóa để
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
hoặc là
for /f "tokens=3-4" %a in ('query session %username%') do @if "%b"=="Active" echo %a
Để sử dụng điều này trong một tập lệnh (tệp bó), bạn có thể muốn nói
set MY_SESSION_ID=unknown
for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" set MY_SESSION_ID=%%a
sử dụng %%a
và %%b
(thay vì %a
và %b
) vì nó nằm trong một tập lệnh. Bạn có thể có thể bỏ qua @
nếu toàn bộ tập tin lô nằm dưới @echo off
. Việc khởi tạo để unknown
cho phép bạn xử lý lỗi (phát hiện nếu không có dòng nào trong đầu ra của query session
kết quả khớp đó). Mở rộng xử lý lỗi để nhận biết và phản ứng nếu có nhiều dòng khớp trong đầu ra của query session
còn lại là một bài tập.