batch-file - 有没有办法在一次检查中减少咨询时间?
问题描述
我有这个批处理代码,它工作得很好,但是:每行需要大约 60 秒才能执行,我想知道,如果我能更快地做到这一点......
还有 if 语句。我想检查是否每个窗口都关闭了,如果是,我想执行一些操作。但是如果至少有一个窗口仍然打开,那么它应该再次检查它。
:loop
for /f %%i in ('tasklist /v /fi "WINDOWTITLE eq %server1%" /FO Table') do set #1=%%i
for /f %%i in ('tasklist /v /fi "WINDOWTITLE eq %server2%" /FO Table') do set #2=%%i
for /f %%i in ('tasklist /v /fi "WINDOWTITLE eq %server3%" /FO Table') do set #3=%%i
for /f %%i in ('tasklist /v /fi "WINDOWTITLE eq %server4%" /FO Table') do set #4=%%i
for /f %%i in ('tasklist /v /fi "WINDOWTITLE eq %server5%" /FO Table') do set #5=%%i
for /f %%i in ('tasklist /v /fi "WINDOWTITLE eq %server6%" /FO Table') do set #6=%%i
if not %#1%==cmd.exe (
if not %#2%==cmd.exe (
if not %#3%==cmd.exe (
if not %#4%==cmd.exe (
if not %#5%==cmd.exe (
if not %#6%==cmd.exe (
goto backup
)
)
)
)
)
) else (
echo back to loop
goto openWindow
)
解决方案
让我提出一个稍微不同的方法。if
只要存在其中一项任务,您就可以循环而不是所有这些语句:
:wait
timeout 1 >nul
for %%a in (%server1% %server2% %server3% %server4% %server5% %server6%) do (
tasklist /nh /fi "windowtitle eq %%a" |find " " >nul && goto :wait
)
echo all closed.
或者
setlocal enabledelayedexpansion
:wait
timeout 1 >nul
for /l %%a in (1,1,6) do (
tasklist /nh /fi "windowtitle eq !server%%a!" |find " " >nul && goto :wait
)
echo all closed.
注意:find " "
查找两个连续的空格,而不是 TAB)
如果您明智地选择窗口标题,您甚至不需要for
循环:
:wait
timeout 1 >nul
tasklist /nh /fi "windowtitle eq MySubWindow*" |find " " >nul && goto :wait
echo all closed.
其中窗口标题都以固定字符串(MySubWindow
此处)开头,例如MySubWindow-1
等MySubWindow-2
(是的,tasklist
可以使用通配符 - 但只能在字符串的末尾)。这基本上是“如果存在标题以 MySubWindow 开头的任何窗口,则循环”
推荐阅读
- javascript - 使用 Wordpress API 和 Javascript 库添加带有媒体的帖子
- python - 在 Tkinter 中制作一个对东、西和南都具有粘性的小部件
- windows - 您可以在 windows MSI/Orca.exe 中创建名称包含句点的目录吗?
- javascript - 猫鼬不会保存用户
- python - 转到 Spyder 4.0..0 中缺少的定义
- python - 使用什么模式来删除文本文件中的任何未知字符,例如将中文翻译成拉丁文?
- python - 使用 Python 从 Outlook 为每个收件人提供个性化附件
- javascript - 将 mapDispatchAsProps 定义为简单的 actionCreators 对象不会将道具传递给组件
- javascript - Javascript:检查数组是否是几乎递增的序列
- python - 使用 while 循环将项目添加到列表