Windows批处理文件无法一致地工作

时间:2013-04-23 15:25:51

标签: windows vbscript batch-file telnet

我有一个批处理文件启动telnet会话并使用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会话刚刚超时,窗口永远不会关闭。

为什么这只会有时起作用?我是否需要增加睡眠时间?我试着睡了6000毫秒,看起来它足够长。我一直在尝试很多东西,但是我一直在坚持这一部分,我愿意在这一点上尝试一下,请任何建议吗?

1 个答案:

答案 0 :(得分:2)

Telnet本身就是不稳定的。手动登录交换机或路由器时,我会不时得到类似的行为。尝试登录和退出telnet服务器10-20次,看看它是否挂在用户名提示符下。我不认为你的脚本应该受到责备,尽管vbscript中的sendkeys方法无论如何都是可怕的。它只在有时和特定条件下有效。我建议把

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

中的

之前的

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

也是。这样你至少知道击键会转到正确的窗口。您可能需要查看AutoIT。将密钥发送到Windows时更加强大。