批量if语句基于打开程序

时间:2015-09-01 19:31:13

标签: windows batch-file if-statement

是否可以根据打开程序的用户为批处理生成if语句?

我试过了:

color c
echo off
cls

:props
if open WINWORD.exe (echo a & pause 10 & exit) 
goto props

这样做只会发布错误'此时WINWORD意外。'并终止命令提示符。

我想要实现的是一个批处理文件:

  1. 查看是否有人正在打开WINWORD.exe
  2. 一旦有人打开文件,命令提示符将显示“a”
  3. 显示“a”后10秒后退出命令提示符。

1 个答案:

答案 0 :(得分:2)

您可以使用tasklist.exefind来搜索流程来计算实例:

set PROC=winword.exe
tasklist /FI "IMAGENAME eq %PROC%" | find /C /I "%PROC%"

我使用变量%PROC%来指定进程(*.exe)名称只是为了方便起见。

如果没有找到实例,

find也将以1的返回码(ErrorLevel)退出。使用简单的if语句,您可以按照自己的要求执行操作:

if not ErrorLevel 1 ((echo a) & timeout /T 10 /NOBREAK & exit)

我将pause 10替换为timeout命令,因为pause等待用户按任意键(忽略任何参数)。开关/NOBREAK表示忽略任何按键操作。

echo a周围的括号可以避免回显尾随空格。

总而言之,以下内容应该符合您的要求:

color c
echo off
set PROC=winword.exe
cls

:props
tasklist /FI "IMAGENAME eq %PROC%" | find /C /I "%PROC%" > nul
if not ErrorLevel 1 ((echo a) & timeout /T 10 /NOBREAK & exit)
timeout /T 1 /NOBREAK > nul
goto props

> nul之后的(可选)find部分阻止它显示找到的实例数。

已插入第二个延迟时间timeout /T 1以避免此循环结构中的大量CPU负载。