我必須向執行特定進程的多個用戶發送msg: 如何查找用戶名列表,例如執行圖像「chrome」。 exe「,然後將msg發送給這些用戶。 上述所有活動必須在蝙蝠文件中 提前謝謝!如何查找運行特定進程的用戶列表
-1
A
回答
2
基礎上意見xmcp的回答,我擴大代碼位:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%x in ('tasklist /fi "imagename eq firefox.exe" /fo csv /nh /v') do (
set line=%%x
set line=!line:","="@"!
for /f "tokens=7 [email protected]" %%a in (!line!) do echo %%~a
)
它取代了字段分隔符(","
),而不觸及逗號在數字內(在某些本地化中)並用不同的分隔符分析結果字符串。 Donwside:它會減慢速度(theroetical,我想沒有人會注意到這一點)
1
試試這個:
@echo off
for /f "tokens=8" %%i in ('tasklist /fi "imagename eq chrome.exe" /fo table /nh /v') do echo %%i
請注意,如果圖像名稱中包含空格的代碼可能是馬車,但我找不到純批處理文件的完美解決方案。
說明:
0
xmcp的answer給出了完美的命令檢索進程和其所屬的用戶的名稱。但是,如果數據中出現額外的空格,則它們的解決方案將失敗。
爲了使它更安全,由標準for
循環使用tasklist
命令的csv輸出格式,捕捉由for /F
環路其輸出以實線/行和提取單塔/小區項目:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem /* Capture CSV-formatted output without header; `tasklist` returns these columns:
rem `"Image Name","PID","Session Name","Session#","Mem Usage","Status","User Name","CPU Time","Window Title"`: */
for /F "delims=" %%L in ('
tasklist /FI "ImageName eq Chrome.exe" /FI "Status eq Running" /V /NH /FO CSV
') do (
rem // Initialise column counter:
set /A "CNT=0"
rem /* Use standard `for` loop to enumerate columns, as this regards quoting;
rem note that the comma `,` is a standard delimiter in `cmd`: */
for %%I in (%%L) do (
rem // Store item with surrounding quotes removed:
set "ITEM=%%~I"
rem /* Store item with surrounding quotes preserved, needed for later
rem filtering out of (unquoted) message in case of no match: */
set "TEST=%%I"
rem // Increment column counter:
set /A CNT+=1
rem // Toggle delayed expansion not to lose exclamation marks:
setlocal EnableDelayedExpansion
rem /* in case no match is found, this message appears:
rem `INFO: No tasks are running which match the specified criteria.`;
rem since this contains no quotes, the following condition fails: */
if not "!ITEM!"=="!TEST!" (
rem // The 7th column holds the user name:
if !CNT! EQU 7 echo(!ITEM!
)
endlocal
)
)
endlocal
exit /B
這只是迴應當前運行名爲Chrome.exe
的進程的每個用戶的名稱。要向他們發送消息,您可以使用net send
命令而不是echo
。
如果CSV數據包含全局通配符*
和?
,則此方法不起作用;這些字符不應該出現在圖片,會話和名稱中;它們可能會出現在窗口標題中,但它們出現在tasklist
輸出中的用戶名之後。
相關問題
- 1. 如何查找在特定日期從特定用戶名運行的命令
- 2. 如何以特定用戶身份運行Ruby守護進程?
- 3. 如何改進查找列表中特定數字的代碼?
- 4. 如何檢查NSIS中特定端口上運行的進程
- 5. 檢索未運行特定進程的PC的列表
- 6. 獲取正在運行的進程的列表,並殺死特定的進程
- 7. 爲特定用戶列出進程
- 8. 如何針對特定的運行進程運行循環檢查vbs?還是缺少進程?
- 9. 如何檢查誰運行/激活之前鎖定特定端口的進程?
- 10. 如何找到使用特定內核模塊的進程列表?
- 11. 如何找到在特定的PBS作業上運行的當前進程
- 12. 獲取QNX中正在運行的用戶進程列表
- 13. 查找列表中的特定模式
- 14. 如何找到一個特定的進程仍在PHP中運行
- 15. 運行Windows應用程序使用特定的用戶帳戶
- 16. 查找特定行
- 17. 如何在VB.NET中查找正在運行的進程
- 18. 查找特定進程的子進程(UNIX)
- 19. 如何知道特定的進程在python中運行?
- 20. 在特定時間運行SQL進程
- 21. 如何使用字符串列表進行查找?
- 22. Android:我如何找到對特定聯繫人進行的呼叫列表?
- 23. 如何找到表中的行,在特定列中的R
- 24. 正在運行的進程列表
- 25. 如何從TaskScheduler運行時查找/關閉進程?
- 26. 如何查找任意進程是否在wow64下運行?
- 27. 如何查找數據表中的特定行
- 28. 如何通過jQuery數據表中的值查找特定行?
- 29. 如何查找列表中的行
- 30. Java:如何在特定目錄中運行Java進程?
爲什麼*必須*它是一個批處理文件?微軟現代化的首選系統腳本和管理工具PowerShell將使*更容易*。家庭作業,也許? – alroc