我正在尝试使用 Windows 7 中的 telnet 命令通过批处理脚本控制 wifi 设备,但我不知道如何将命令传递到 telnet 窗口。这将是调整其他设备和 PC 设置的较长脚本的一部分。
我可以手动执行此操作,方法是运行telnet <IP address> 55443
cmd.exe,这会创建一个新窗口。在该窗口中,我可以为设备编写命令,设备可以按预期工作。但是,当我在脚本中编写代码时,如下所示:
telnet <IP address> 55443 <device commands>
它们<device commands>
不会传递到新创建的 telnet 窗口。
答案1
telnet 命令没有提供很多输入某些命令的选项......
我会在这里留下两个可能的选择
使用软件控制台执行此操作Telnet 脚本工具
一种选择是使用发送键/VBS非常有用发送按键、命令等,将发送您的条目/类型发送至远程登录接口实例/会话...
下面是使用的示例发送键/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
要解决此问题,请在命令行上应用此命令(这需要管理员权限)并仅运行一次此命令
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"
Option #2
使用Telnet 脚本工具...
Telnet 脚本工具是一个用于自动化 telnet 会话的实用程序(例如,在 Linux 系统上调用 dip,或执行路由器维护)。
这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
- 更新 v2 - 将带有 sendkey 的 bat 移植到你的命令(字符串):
{"id":0,"method":"set_power","params":["on","smooth",500]}
使用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