Windows 批处理文件无法始终如一地工作

标签 windows vbscript batch-file telnet

我有一个启动 telnet session 并使用 vbs 脚本执行一些命令的批处理文件:

start telnet.exe another.hostname
timeout /t 1 /nobreak > NUL
cscript c:\scripts\sendtelnet.vbs 1

我的 vbs 脚本如下所示:

WScript.sleep 1000
arg = Wscript.Arguments.Item(0)
WScript.sleep 1000
cmd = "RUN CMD D "&arg&"{ENTER}"
WScript.sleep 1000
set OBJECT=WScript.CreateObject("WScript.Shell")
WScript.sleep 6000
OBJECT.SendKeys "administrator{ENTER}" 
WScript.sleep 200
OBJECT.SendKeys "mypass{ENTER}"
WScript.sleep 200
OBJECT.SendKeys cmd
WScript.sleep 5000
OBJECT.SendKeys "QUIT{ENTER}" 
WScript.sleep 500 
OBJECT.SendKeys "{ENTER}" 
WScript.sleep 100 
OBJECT.SendKeys " "

我可以运行此测试大约 10 次,但它只能运行 10 次中的大约 8 次。我目睹了测试失败,发生的事情是打开了 telnet 窗口,但它卡在“用户名”提示符上,最终 telnet session 超时并且窗口永远不会关闭。

为什么这只在某些时候有效?我是否需要增加 sleep 时间?我试过休眠 6000 毫秒,似乎已经足够长了。我一直在尝试很多事情,但我一直卡在这部分,我愿意在这一点上尝试任何事情,请给我任何建议?

最佳答案

Telnet 本身就不稳定。手动登录交换机或路由器时,我时常会遇到类似的行为。尝试登录和退出 telnet 服务器 10-20 次,看看它是否卡在用户名提示符处。我不认为你的脚本是罪魁祸首,尽管 vbscript 中的 sendkeys 方法无论如何都很糟糕。它只在某些时候和特定条件下起作用。我建议把

object.appactivate ("C:\windows\system32\telnet.exe") 

在你之前的 vbscript 中

cmd = "RUN CMD D "&arg&"{ENTER}"

还有。这样你至少知道击键会转到正确的窗口。你可能想看看 AutoIT .将 key 发送到 Windows 更加可靠。

关于Windows 批处理文件无法始终如一地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173315/

相关文章:

java - 如何通过控制台将非英文文件名传递给java主参数?

javascript - 切换 .hta 中的表 <td>

windows-7 - 将 VBScript 从 WinXP 移植到 Win7 的问题

batch-file - 如何在批处理脚本的for循环中使用子字符串?

windows - 在 Windows 任务管理器中更改进程优先级会导致问题吗?

c# - 如何确定连接的套接字是否使用 IPSec?

Windows 命令在 cmd 中有效,但在 .bat 文件中无效

windows - 按批处理 "CMD"文件为特定系统执行特定作业

c++ - 沉浸式全屏模式之上的透明窗口

ssl - XP POSReady 和 TLS 1.2