2014-09-24 120 views
3

我在尋找,收集,只有當你運行該netstat命令輸出的PID值:解析Windows命令行輸出,直連的PID

netstat -a -o -n -p tcp | findstr -i "CLOSE_WAIT" 

我的目的是使用PID和創建一個腳本,將運行taskkill /PID pidfoundhere刪除任何具有CLOSE_WAIT狀態的套接字。

回答

4
@echo off 
    for /f "tokens=5" %%a in (' 
     netstat -noa -p tcp ^| find /i "CLOSE_WAIT" 
    ') do if not "%%a"=="0" echo taskkill /pid %%a 

使用for命令分割使用空格作爲分隔符行,獲得在該行的第5代幣,如果有PID,殺進程

taskkill命令只回顯到控制檯。如果輸出是正確的,刪除​​echo命令

+0

我修改它有點更具體一些,但我有另一個問題。任何線索如何在Java中執行此命令?我有一些問題運行它: String command =「@echo off for/f \」tokens = 5 \「%% a in('netstat -noa -p tcp^| find/i \」CLOSE_WAIT \ 「^ | find/i \」「+ ip +」:443 \「')如果不是\」%% a \「== \」0 \「echo taskkill/pid %% a」; Process runCommand = Runtime.getRuntime()。exec(command); 當前出現錯誤:無法運行程序「@echo」:CreateProcess錯誤= 2,系統找不到指定的文件 – user3459799 2014-09-25 16:46:19

+0

還嘗試將該字符串[]傳遞給exec()方法並獲取無法運行程序錯誤。 – user3459799 2014-09-25 16:50:44

+0

@ user3459799,很抱歉,java不是我的區域,但代碼原本是在批處理文件中執行的。如果你想從java運行它,而不是使用批處理文件,你需要使用'cmd/c「命令作爲'cmd',誰知道如何執行它,刪除'@echo off',將所有命令放在一行中,並用'%a'替換命令行版本中的所有'%% a'(百分比在批處理文件中轉義)。 – 2014-09-25 16:52:03