我需要一些帮助来编写一个相当基本的.BAT文件。
我加载了我的主程序,但该程序需要大约20秒才能加载并初始化。
我有另一个命令行API我可以执行以与上面的程序进行交互,但显然在上面的程序加载并初始化之前,没有必要尝试。
如果程序没有运行,命令行API将返回一个字符串,说明这一点 - 否则它只是工作并退出。容易。
所以我想等到上面的内容被加载/初始化之后才开始我的API命令。
我可以在那里放置一个睡眠/等待,但我想要更坚实的东西。约20秒的等待不一定是一致的。
任何方法一遍又一遍地执行命令行API,直到响应令人满意,然后退出?
Ĵ
答案 0 :(得分:0)
当然。但是,您应该考虑使用适当的退出代码而不是消息字符串来表示加载尚未完成。除非输出从未在那里进行本地化。
无论如何,我们走了:
:loop
yourcommand.exe | findstr MAGIC STRING SIGNIFYING LOADING NOT YET COMPLETE >nul 2>&1
if not errorlevel 1 goto loop
只要findstr
返回0
作为退出代码(意味着它找到了字符串),这只是重试。
但有两个问题:
这是一种资源匮乏。你应该在那里睡一觉,每隔一秒左右尝试一次,而不是连续不断地做:
ping -n 1 ::1 >nul 2>&1
虽然这将最多运行一次你想要的命令(最后),但它会将所有输出都输出到findstr
。除非你有tee
手头很难解决(它会在输出上进行for
循环并用findstr
检查每一行 - 你不想去那里,相信我
一个选项可能是你的命令有一种方法只是检查然后在循环后发出一个调用的实际命令(当程序被发现工作时存在)。然后,您可以愉快地记录所有输出。但是,如果您正在谈论的程序在退出循环和使用实际命令启动程序之间出现故障,则会出现另一个问题。