解决批处理脚本一闪而过,获取netstat网络连接程序路径问题?

新手上路,请多包涵

我想简便快速获得netstat -ano已连接或已关闭的程序的路径。按照百度AI提供的代码运行一闪而过,代码如下

@echo off
setlocal enabledelayedexpansion
rem 获取netstat的输出,并过滤出已连接(ESTABLISHED)或已关闭(CLOSE_WAIT, TIME_WAIT等)的连接
for /f "tokens=1,5 delims== " %%a in ('netstat -ano | findstr /i /c:"ESTABLISHED" /c:"CLOSE_WAIT" /c:"TIME_WAIT"') do (
    set "pid=%%b"
    rem 去除PID前后的空格
    set "pid=!pid: =!"    
    rem 使用tasklist获取PID对应的程序名称和路径(如果可用)
    for /f "tokens=1,2,* delims== " %%c in ('tasklist /fi "pid eq !pid!" | findstr /i /v "Image Name"') do (
        echo Connection PID: !pid!
        echo Program Name: %%c
        if not "%%d"=="" (
            echo Program Path: %%d
        ) else (
            echo Program Path: Not available
        )
        echo ----------------------------------------
    )
)
endlocal
pause


我问过AI,提供过错误处理来确保即使 tasklist 命令找不到某些PID对应的进程,脚本也不会立即退出。还是不行,最后提供了最简单脚本也是不行。脚本如下


echo Starting script...
rem 获取netstat的输出,并过滤出已连接的连接
for /f "tokens=5 delims== " %%p in ('netstat -ano | findstr /i "ESTABLISHED"') do (
    set "pid=%%p"
    rem 去除PID前后的空格
    set "pid=!pid: =!"
    
    echo Found PID: !pid!
    
    rem 使用tasklist获取PID对应的程序名称
    tasklist /fi "pid eq !pid!" /fo list /nh | findstr /i "Image Name" >nul
    if !errorlevel! equ 0 (
        for /f "tokens=2,* delims=:" %%i in ('tasklist /fi "pid eq !pid!" /fo list /nh | findstr /i "Image Name"') do (
            echo Program Name: %%j
        )
    ) else (
        echo Program not found for PID: !pid!
    )
    
    echo ----------------------------------------
)

我使用管理员权限执行批处理也一样。但我在CMD能正常使用netstat 和 tasklist 。也写了简单的批处理文件能运行的。
系统Windows 11 教育版 24H2 最新版。装有火绒最新版
image.pngimage.png

阅读 333
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏