Windows 如何批量检查存储在变量中的字符串是否与netstat-nao中的ip地址相同
这是我第一次问问题,所以不要对我太苛刻 我正在参加一个小型的“捕获旗帜”活动,我正在编写一些简单的批处理脚本来提供帮助 程序的目的是检查Windows 如何批量检查存储在变量中的字符串是否与netstat-nao中的ip地址相同,windows,batch-file,netstat,Windows,Batch File,Netstat,这是我第一次问问题,所以不要对我太苛刻 我正在参加一个小型的“捕获旗帜”活动,我正在编写一些简单的批处理脚本来提供帮助 程序的目的是检查netstat-nao的输出是否在dontkill变量中。如果是,那就不要杀了它;如果不是,则查找进程id并终止连接dontkill将包含我的IP地址,这样它就不会终止我与计算机的远程连接 看起来很简单,但我遇到了很大的麻烦,因为我不知道如何很好地批量编写 以下是我目前的代码: for /L %%i in (1,0,) do @for /f "tokens=5"
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
这将遍历并查找任何已建立的连接,并在无限循环中终止它们。我已经尝试了此命令的许多不同变体,并且我认识到我需要在第二个do中使用某种if/else
语句来检查dontkill
是否与循环中变量%%a
中存储的内容相同:
for /f "tokens=3" %%a in('"netstat -nao^|findstr ^"ESTABLISHED^"')
我知道这在其他脚本语言中可能会更容易,但它必须是批处理的,因为我将使用它的计算机将是全新安装的Windows XP、Server 2003、2008和Win7
好的,在for循环的正上方,变量a携带的输出类似于“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列)
这种方法的灵感来源于以下几点:
@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)
好的,我已经修改了我的一些问题。谢谢你迅速的回答。在您的帖子中,如果您比较%%j和%%k,您真正比较的是示例ip“192.168.1.130:10000”==PID“54133”。这是正确的还是我遗漏了什么?是的,就是这样。检查新代码以保持稳定。我现在不知道你想测试什么,但这应该会有帮助。好吧,嘿,我在我的问题中添加了一些sudo代码。谢谢你的帮助,你太棒了,非常感谢。不知道这是否有帮助,但我编写了一个批处理脚本来解析netstat输出:
@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)