如何使用批处理脚本将命令传递到 telnet 窗口?

an5*_*531 5 windows telnet command-line batch-file

我试图在 Windows 7 中使用 telnet 命令通过批处理脚本控制 wifi 设备,但我不知道如何将命令传递到 telnet 窗口。这将是调整其他设备和 PC 设置的较长脚本的一部分。

我可以通过运行telnet <IP address> 55443cmd.exe 来手动执行此操作,这会创建一个新窗口。在该窗口中,我可以为设备编写命令,它会按预期工作。但是,当我在脚本中编写代码时,如下所示:

telnet <IP address> 55443 <device commands>

它们<device commands>不会传递到新创建的 telnet 窗口。

It *_* Me 6



telnet 命令不提供用于输入某些命令的许多选项...


我将在这里留下两个可能的选择

  • Option #1使用 ...

一种选择是使用SendKey/VBS,对于发送按键、命令等非常有用,将发送您的条目/类型,将它们发送到telnet接口实例/会话...

下面是使用SendKey/VBS通过bat文件发送登录/输入数据的示例,并在运行时生成文件VBS执行任务

@echo off 
setlocal enabledelayedexpansion 

echo/ && cls && color 9F
%__APPDIR__%mode.com 77,30

set "_user_=cisco_user"
set "_pwd_=my_secret_pwd"
set "_temp_vbs=%tmp%\_tmp_file_vbs_.vbs"

>"!_temp_vbs!"^
    (
     echo/ Set WshShell = WScript.CreateObject^("WScript.Shell"^)
     echo/ Set objShell = WScript.CreateObject^("WScript.Shell"^)
     echo/ StrPwd  = "!_pwd_!"
     echo/ StrUser = "!_user_!"
     echo/ for i=1 To Len^(StrUser^)
     echo/     x = Mid^(StrUser,i,1^)
     echo/     WshShell.SendKeys x
     echo/     Wscript.Sleep 250
     echo/ Next
     echo/ Wscript.Sleep 500
     echo/ WshShell.SendKeys "({ENTER})"
     echo/ for j=1 To Len^(StrPwd^)
     echo/     x = Mid^(StrPwd,j,1^)
     echo/     WshShell.SendKeys x
     echo/     Wscript.Sleep 200
     echo/ Next 
     echo/ Wscript.Sleep 200
     echo/ Wscript.Sleep 200
     echo/ WshShell.SendKeys "dir"
     echo/ Wscript.Sleep 200
     echo/ WshShell.SendKeys "({ENTER})"
     echo/ Wscript.Sleep 200
     echo/ WshShell.SendKeys "quit"
     echo/ Wscript.Sleep 200
     echo/ WshShell.SendKeys "({ENTER})"
     ) && %__APPDIR__%telnet.exe 192.168.0.254 
     
"%__APPDIR__%cScript.exe" //nologo "!_temp_vbs!"
2>nul >nul del /q /f "!_temp_vbs!" & endlocal & goto :EOF
Run Code Online (Sandbox Code Playgroud)

你可以考虑看看这个问题,至于为什么telnet.exe不在 / 上运行。

要纠正此问题,请在命令行上应用此命令(这需要管理员权限)并仅运行此命令一次

for /f %i in ('%__APPDIR__%where /r "C:\Windows\System32" "telnet.exe.mui" ^|%__APPDIR__%findstr.exe [a-z]\-[A-Z] ')do for %C in ("%windir%\system32\.","%windir%\SysWOW64\.")do if exist "%~C." copy /y "%~i" "%~C"
Run Code Online (Sandbox Code Playgroud)

Telnet Scripting Tool 是一个用于自动化 telnet 会话的实用程序(例如在 Linux 系统上调用 dial,或进行路由器维护)。

Telnet 脚本工具还可以将条目发送到 telnet...

基本上,该软件会读取屏幕并查找预测字符串,您将通知该字符串等待该软件发送到 telnet 的下一个命令...

下面是使用Telnet 脚本工具的示例,该工具通过文本文件内容发送命令输入“%temp%\script_ts.scr”

@echo off 

setlocal enabledelayedexpansion 

%__APPDIR__%mode.com 77,30
echo/ && color 9F && echo/

set "_user_=my_user_name"
set "_pwd_=my_secret_pwd"
set "_ip_door_=10.0.50.1 23"

>"%temp%\script_ts.scr" ^
    (
     echo=!_ip_door_!
     echo=WAIT "User Name"
     echo=SEND "!_user_!\m"
     echo=WAIT "Passoword"
     echo=SEND "!_pwd_!\m"
    ) && "%temp%\TST10.exe" /r:"%temp%\script_ts.scr" /o:"%temp%\output_ts.txt"
endlocal & goto :EOF
Run Code Online (Sandbox Code Playgroud)

  • 更新 v2 - 将带有 sendkey 的 bat 移植到您的命令(字符串):
 {"id":0,"method":"set_power","params":["on","smooth",500]}
Run Code Online (Sandbox Code Playgroud)

Send Key在命令中使用许多特殊字符,您需要转义{:)}

@echo off && setlocal enabledelayedexpansion 

echo/ && cls && color 9F && %__APPDIR__%mode.com 77,30 && set "_temp_vbs=%tmp%\_tmp_file_vbs_.vbs" && >"!_temp_vbs!"^
  (    
   echo= On Error Resume Next
   echo= Set WshShell = WScript.CreateObject("WScript.Shell"^)
   echo= Set ObjShell = WScript.CreateObject("WScript.Shell"^)
   echo= Wsh.sleep 2000 'adjust this timeout for your needs
   echo= ObjShell.AppActivate "MS Telnet CMD" 
   echo= Wsh.sleep 333
   echo= WshShell.SendKeys "o 192.168.0.1 55443~"
   echo= Wsh.sleep 1500
   echo= WshShell.SendKeys "({{}{""}id{""}:0,{""}method{""}:{""}set_power{""},{""}params{""}{:}{[}{""}on{""},{""}smooth{""},500{]}{}}})"
   echo= Wsh.sleep 50
   echo= WshShell.SendKeys "~"
   echo= Wsh.sleep 50
   echo= WshShell.SendKeys "^]"
   echo= Wsh.sleep 50
   echo= WshShell.SendKeys "quit~"
  ) && pushd %windir%\system32\ & title <nul && title MS Telnet CMD

start "" /b "%__APPDIR__%cScript.exe" //nologo "!_temp_vbs!" && call telnet.exe 

:loop
tasklist.exe /nh | findstr.exe /i cscript.exe >nul && goto :loop
2>nul >nul del /q /f "!_temp_vbs!" & popd & endlocal & exit
Run Code Online (Sandbox Code Playgroud)