Board logo

标题: [问题求助] 求助VBS在SecureCRT执行的循环嵌套语句循环失效问题 [打印本页]

作者: key9527    时间: 2022-11-3 09:17     标题: 求助VBS在SecureCRT执行的循环嵌套语句循环失效问题

本人自学,所以遇到问题可能很简单,高手请请喷。
事情是这样的,因为设备启动时出现不定的多次启动,因此我希望前面的语句可以循环执行到满足条件,代码如下:
  1. Sub Main
  2. for i = 1 to 500
  3. Do
  4. crt.Screen.WaitForString ("Hit ESC to stop autoboot: 60 ") // 设备启动时会出现选择对话框
  5. crt.Screen.Send chr(27) //chr27是按ESC的意思
  6. crt.Screen.WaitForString( "Option?" )
  7. crt.Screen.Send "1" & chr(13)
  8. loop until crt.Screen.WaitForString ("sw0 login: ") //关键句就在这里,每次启动都要按ESC然后选择1,设备才会继续往下走到 sw0 login:那里,所以我做了一个条件循环,目的是只要没达到条件就一直循环到DO下面的语句执行
  9. crt.Screen.Send "root" & chr(13) //达到条件后输入账户名
  10. next
  11. End Sub
复制代码
实际运行的时候do loop不起作用,如果只启动一次,那么脚本会顺利执行结束,如果启动两次的话,还是会卡在“Hit ESC to stop autoboot: 60 ”这一句,也没有大神看出问题在哪?
作者: key9527    时间: 2022-11-3 09:19

我只想知道代码也没有问题,如果没有的话,我就去找别的方面原因。
作者: czjt1234    时间: 2022-11-3 15:58

如果只启动一次,那么脚本会顺利执行结束,如果启动两次的话

这里,启动两次是什么意思?
是硬件断电重启,全新开机吗?
这个支持什么输出指令吗,比如msgbox啊,或输出文件到磁盘啊,可以加几句看看到底执行到哪一步了,还是一句都没执行
作者: key9527    时间: 2022-11-3 18:14

本帖最后由 key9527 于 2022-11-3 19:04 编辑

回复 3# czjt1234


    启动两次就是,我上一次电,它会自动重启一次,也就是会出现两次要输入指令的情况,关键还是随机的,所以我在输入指令的地方加了一个DO循环。
检查软件,它会停留在DO循环下面那一句,也就是我贴的代码的第4行,检测到了条件,但是也不继续执行。
奇怪的是,如果只启动一次,它是可以正常执行循环里的内容的,并且遇到until的条件就跳出循环,所以问题就是DO这个循环不知道什么原因没有起到循环的作用。
我想了想,莫非是软启动不会触发FOR这个循环?因为FOR循环要执行到NEXT后才能下一个循环,而软启动重新上电后FOR循环其实还停留上一次执行那里,也就是DO循环那里?
但这样也不应该啊,DO循环重启动后又不再起作用?这样的话,上电必须换什么循环才能像FOR循环一样接着上次跑呢?
作者: czjt1234    时间: 2022-11-3 18:28

这个支持什么输出指令吗,比如msgbox啊,或输出文件到磁盘啊,可以加几句看看到底执行到哪一步了,还是一句都没执行

所以我要问这个啊,看看第二次是不是就没运行这个vbs
作者: key9527    时间: 2022-11-3 19:03

回复 5# czjt1234


    For语句重新上电是会继续执行的,没有这个BUG的时候我用这个脚本跑了很多次,是可以顺利执行的。不过FOR语句必须完全执行到NEXT那里才能循环到第一句,所以要是中途哪里停了,脚本也就会一直卡在那里了。
作者: key9527    时间: 2022-11-3 19:08

可能我上面没说清楚,我说的是,我用CRT软件检查了,卡主的时候就是卡在了DO下面的那一句那里,说明重新上电后DO循环就不执行了。但我记得DO循环会一直执行到UNTIL条件出现,难道重新上电就不行了吗?
作者: czjt1234    时间: 2022-11-3 19:41

那你在Do下面加一句别的,看看到底是Do不执行了,还是那句
crt.Screen.WaitForString
在重新上电后就不认当前显示为crt.Screen了

crt.Screen2  ?
作者: key9527    时间: 2022-11-3 19:46

那你在Do下面加一句别的,看看到底是Do不执行了,还是那句
crt.Screen.WaitForString
在重新上电后就不认 ...
czjt1234 发表于 2022-11-3 19:41



    好吧,我试试
作者: czjt1234    时间: 2022-11-3 20:01

能麻烦你在SecureCRT中测试下吗
vbNewLine = Chr(10)
看看等式是否成立
作者: key9527    时间: 2022-11-4 09:13

回复 10# czjt1234


    没怎么看明白,这个不是赋值吗?而且CRT需要进入一个操作系统里面才能使用命令,我这个系统应该不认识这个命令。
不过我今天会帮你试试,看看是什么结果。
作者: czjt1234    时间: 2022-11-4 10:45

比如
Do
...
Loop until vbNewLine = Chr(10)
看看是否一直循环
作者: key9527    时间: 2022-11-4 11:20

比如
Do
...
Loop until vbNewLine = Chr(10)
看看是否一直循环
czjt1234 发表于 2022-11-4 10:45



    还是会停留在DO下面那一句……




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2