我想简便快速获得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 最新版。装有火绒最新版