2017-10-10 528 views
-2

這是一個模擬機器答案的腳本,我的問題是「WaitForStrings」dosent區分「open」和「open1」或「close」和「close1」,他總是回答 「打開」 和 「關閉」使用WaitForStrings()和Switch Case的secureCRT VBS

firstopen=true 
 
while(true) 
 
\t strResult = crt.Screen.WaitForStrings("open1","close1","open","close","SCAN") 
 
\t Select Case strResult 
 
\t \t Case 1 
 
\t \t \t crt.Sleep 500 
 
\t \t \t crt.Screen.Send("open1_ok") & chr(13) 
 
\t \t Case 2 
 
\t \t \t crt.Sleep 500 
 
\t \t \t crt.Screen.Send("close1_ok") & chr(13) 
 

 
\t \t Case 3 
 
\t \t \t If firstopen=true then 
 
\t \t \t \t crt.Sleep 500 
 
\t \t \t \t crt.Screen.Send("open_ok") & chr(13) \t 
 
\t \t \t \t firstopen=false 
 
\t \t \t else 
 
\t \t \t \t crt.Sleep 500 
 
\t \t \t \t crt.Screen.Send("ok") & chr(13) 
 
\t \t \t \t firstopen=true 
 
\t \t \t end if \t 
 
\t \t Case 4 
 
\t \t crt.Sleep 500 
 
\t \t crt.Screen.Send("ready") & chr(13) 
 

 
\t \t Case 5 
 
\t \t crt.Sleep 500 
 
\t \t crt.Screen.Send("CCD_PASS") & chr(13) 
 
\t \t 
 
\t \t Case Else 
 
\t \t crt.Screen.Dialog "We didn't find what we were looking for" 
 
\t 
 
\t End Select 
 
wend

+1

那麼你想讓我們做什麼?我們不能改變'WaitForStrings()'方法的行爲,也許可以嘗試'「1open」'和'「1close」',看看它是否可以識別。你只需要處理這個限制並找到解決方法。 – Lankymart

+0

這是我不能改變預期字符串的問題... – idan357

+0

是['Screen.Synchronous = True'](https://stackoverflow.com/a/46668176/692942)? – Lankymart

回答

0

可能是相關的

A Guide to Using VBScript in SecureCRT - Page 41 (excerpt)
避免「丟失」的數據與Screen.Synchronous = True

爲了避免WaitForString()和錯過的數據 從遠程發送的潛力及其相關的方法,而你的腳本中的其他代碼正在執行時, 知道與Screen對象關聯的Synchronous屬性很重要。您可能會看到 看到Screen.Synchronous = True語句出現在您在本文檔前面看到的一些示例代碼 中;本節試圖解釋在您的代碼中何時使用這些語句的時間是重要的 。

...

如果你的腳本代碼似乎「失蹤」的屏幕上顯示的數據,檢查你的代碼 並確保Screen對象的Synchronous屬性與你工作是 設置爲True。 注意,但是,該設置Screen.SynchronousTrue可似乎對SecureCRT的性能產生影響,因爲 數據將不會被顯示在屏幕上,直到調用 WaitForStringWaitForStringsReadStringWaitForCursor製成。對於 例如,下面的腳本代碼將導致成功連接到遠程主機,但 什麼都不會被顯示在終端窗口因爲腳本是永遠循環(沒有 進行任何呼叫ReadStringWaitForStringWaitForStrings,或WaitForCursor )。