如何检查存储在变量中的字符串是否与netstat -nao中的ip地址相同

时间:2014-04-18 22:27:09

标签: windows batch-file netstat

这是我第一次提出问题,所以尽量不要对我这么做。

我正在竞争一个小的捕获旗帜事件,我正在编写一些简单的批处理脚本来帮助我们。

程序的目的是检查netstat -nao的输出是否在dontkill变量中。如果是,那就不要杀了它;如果不是,则查找进程ID并终止连接。 dontkill将包含我的IP地址,因此它不会终止与计算机的远程连接。

看起来很简单,但我遇到了很大的麻烦,因为我不知道如何批量写作。

到目前为止,这是我的代码:

for /L %%i in (1,0,) do @for /f "tokens=5" %%j in ('netstat -nao ^| findstr ^"ESTABLISHED^"' ) do @taskkill /f /PID %%j

通过并查找任何ESTABLISHED连接并在无限循环中杀死它们。我已经尝试了这个命令的许多不同变体,我认识到我需要在第二个中使用某种if/else语句来检查dontkill是否与存储在变量%%a中的内容相同1}}在循环中:

for /f "tokens=3" %%a in('"netstat -nao^|findstr ^"ESTABLISHED^"')

我知道在其他一些脚本语言中这可能会更容易,但它必须是批处理的,因为我将使用它的计算机将全新安装Windows XP,Server 2003,2008和Win7。

好的,直接位于变量a上面的for循环就像这样输出" 192.168.1.230:1003"所以它有ip地址,也有冒号分隔的端口。

我需要能够将它与只有Ip地址的变量dontkill进行比较。

有没有办法摆脱:1003以便我可以将它与变量dontkill进行比较。

我一直在搞乱诸如

之类的事情
SET line="192.168.1.241:10256"
SET string3=%line::[0-9]*=%

但它没有用。

所以要明确我试图从" 192.168.1.241:10256"到" 192.168.1.241"这样我就可以将最终结果与dontkill进行比较并决定该怎么做。

感谢您的帮助。

Sudo代码 ////////////////////////////////////////////////// ///////////////// DONTKILL =" 192.168.1.241"

FOR(FINDSTR过滤的过程数量。见第3栏和第5栏)

VAR A IS THE COLUMN 3 INFO which is some ip address with port "192.168.1.241:1003"

VAR B IS THE COLUMN 5 INFO which is PID "1524"

IF(DONTKILL == A)

    DONTKILL THAT PROCESS
ELSE
    KILL THAT PROCESS USING 
    TASKKILL /F /PID B

我从http://blog.commandlinekungfu.com/2010/01/episode-76-say-hello-to-my-little.html

获得了这种方法的灵感

1 个答案:

答案 0 :(得分:0)

像这样:

@echo off&cls
setlocal EnableDelayedExpansion

set "DONTKILL=127.0.0.1"

for /f "tokens=1-5 delims= " %%a in ('netstat -nao ^| find /i "ESTABLISHED"' ) do (
echo [%%a] [%%b] [%%c] [%%d] [%%e]
call:GetIP %%c

if !$IP!==%DONTKILL% (
echo IP !$IP! IS EQUAL TO DONTKILL [%DONTKILL%] 
echo.
) else (
echo IP !$IP! IS NOT EQUAL TO DONTKILL [%DONTKILL%]
echo.
)
)
exit/b

:GetIP
for /f "tokens=1 delims=:" %%a in ('echo %1') do (
set "$IP=%%a"
goto:eof)