2014-09-24 119 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