Telnet/SSH自动化执行命令并校验设备响应的实现问询
我来给你梳理几个上手简单的批处理实现方案,都是基于你提到的工具,完美适配你的需求~
方案一:用Ncat实现响应校验(快速上手)
这个方案直接基于你已经能用的Ncat命令,加上批处理的逻辑判断就行,代码很直观:
@echo off setlocal enabledelayedexpansion :: 发送命令并捕获设备返回的响应 for /f "delims=" %%a in ('echo WE1*1RTMP ^| ncat 192.168.1.248 23 -n 5') do set "response=%%a" :: 校验响应内容 if "!response!"=="E1*1RTMP" ( echo 命令执行成功!窗口将在2秒后关闭... timeout /t 2 /nobreak >nul exit /b 0 ) else ( echo 命令执行失败!设备返回内容:!response! echo 请检查命令或设备连接,按任意键退出... pause >nul )
小细节说明:
-n 5是给Ncat加5秒超时,避免设备没响应时窗口一直挂着setlocal enabledelayedexpansion是为了在if判断里正常读取变量值- 如果设备返回的内容有多余换行或前缀,也可以改用
findstr来匹配(更灵活):@echo off echo WE1*1RTMP | ncat 192.168.1.248 23 -n 5 | findstr /c:"E1*1RTMP" >nul if %errorlevel% equ 0 ( echo 命令执行成功,即将关闭窗口... timeout /t 2 /nobreak >nul ) else ( echo 命令执行失败!未收到预期响应 pause >nul )
方案二:用Plink(Telnet模式)实现校验
如果你习惯用Plink的Telnet配置,把命令写到文本文件(比如cmd.txt,内容就是WE1*1RTMP),然后用批处理捕获输出判断:
@echo off setlocal enabledelayedexpansion :: 通过Plink加载Telnet配置并执行命令文件 for /f "delims=" %%a in ('plink.exe -load RECtelnet ^< cmd.txt') do set "response=%%a" :: 校验逻辑和上面一致 if "!response!"=="E1*1RTMP" ( echo 命令执行成功,窗口即将关闭... timeout /t 2 /nobreak >nul exit /b 0 ) else ( echo 命令执行失败!设备返回:!response! pause >nul )
方案三:用Plink的SSH配置「REC」实现(推荐更稳定)
SSH比Telnet更可靠,既然你已经有现成的SSH配置文件「REC」,直接用它发送命令会更省心,不需要额外的命令文本文件:
@echo off setlocal enabledelayedexpansion :: 用SSH配置发送命令并捕获响应 for /f "delims=" %%a in ('plink.exe -load REC "WE1*1RTMP"') do set "response=%%a" :: 校验响应 if "!response!"=="E1*1RTMP" ( echo SSH命令执行成功!窗口将在2秒后关闭... timeout /t 2 /nobreak >nul exit /b 0 ) else ( echo SSH命令执行失败!设备返回:!response! echo 按任意键退出... pause >nul )
注意事项:
- 确保Plink/Ncat的路径在系统
PATH环境变量里,或者在批处理里写全路径(比如C:\Program Files\PuTTY\plink.exe) - 批处理文件保存为ANSI编码,避免中文提示出现乱码
- 如果设备响应有延迟,可以适当调整超时参数(Ncat的
-n,Plink可以加-w 5设置5秒超时)
内容的提问来源于stack exchange,提问作者Veehxia
相关产品推荐
相关产品推荐

