2013-04-23 24 views
1

我有啓動Telnet會話,並執行與使用vbs腳本幾個命令的批處理文件:Windows批處理文件不能持續工作

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次,但它只能在大約8次中運行10次。我目睹了測試失敗,會發生什麼事是telnet窗口打開,但它掛在「用戶名」提示符上,最終Telnet會話超時,窗口不會關閉。

爲什麼這隻有時纔有效?我是否需要增加睡眠時間?我試圖睡6000毫秒,而且它似乎已經足夠長了。我一直在嘗試很多東西,但我一直在這個部分卡住,我願意在這一點上嘗試任何事情,請有任何建議嗎?

+1

你失去了重點? '成功= OBJECT.AppActivate(「telnet窗口的標題在這裏」)'發送密鑰之前 – 2013-04-23 15:44:21

+0

這是一個非常好的建議,亞歷克斯,我會試試這個。 – 2013-04-23 16:23:45

回答

2

Telnet本身就是片狀的。手動登錄交換機或路由器時,我會不時得到類似的行爲。嘗試登錄和退出遠程登錄服務器10-20次,看看它是否掛在用戶名提示符下。我不認爲你的腳本是怪,儘管在VBScript中的sendkeys方法是可怕的。它只在有時和在特定條件下才有效。我建議把

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

在您的VBScript之前

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

爲好。這樣你至少知道擊鍵會進入正確的窗口。你可能想看看AutoIT。將密鑰發送到Windows更加健壯。

+0

謝謝您的迴應先生。 '無論如何,vbscript中的sendkeys方法是可怕的'爲什麼會這樣?它只是不可靠嗎? – 2013-04-23 16:23:23

+2

非常不可靠。如果有多個窗口使用相同的標題,請嘗試使用它,您會看到我的意思。你會得到哪一個?沒人知道! – 2013-04-23 16:35:42

+0

謝謝,劇本肯定已經失去了重點:)現在似乎工作,但我會記住你的建議。 – 2013-04-23 16:43:57