Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何批量检查存储在变量中的字符串是否与netstat-nao中的ip地址相同_Windows_Batch File_Netstat - Fatal编程技术网

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)