an5*_*531 5 windows telnet command-line batch-file
我试图在 Windows 7 中使用 telnet 命令通过批处理脚本控制 wifi 设备,但我不知道如何将命令传递到 telnet 窗口。这将是调整其他设备和 PC 设置的较长脚本的一部分。
我可以通过运行telnet <IP address> 55443
cmd.exe 来手动执行此操作,这会创建一个新窗口。在该窗口中,我可以为设备编写命令,它会按预期工作。但是,当我在脚本中编写代码时,如下所示:
telnet <IP address> 55443
<device commands>
它们<device commands>
不会传递到新创建的 telnet 窗口。
telnet 命令不提供用于输入某些命令的许多选项...
我将在这里留下两个可能的选择
使用名为Telnet Script Tool 的软件控制台来完成此操作
一种选择是使用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)
要纠正此问题,请在命令行上应用此命令(这需要管理员权限)并仅运行此命令一次
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)
Option #2
使用Telnet 脚本工具...
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)