这是我第一次提出问题,所以尽量不要对我这么做。
我正在竞争一个小的捕获旗帜事件,我正在编写一些简单的批处理脚本来帮助我们。
程序的目的是检查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
获得了这种方法的灵感答案 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)