2016-10-04 97 views
2

我一直在使用以下脚本来检查特定的命名窗口是否打开。批处理文件,标识命名窗口是否打开,然后关闭它

我是从这个线程: -

How do you test if a window (by title) is already open from the command prompt?

最好我将扩大其他部分关闭窗口,如果它被发现是开放的。

@For /f "Delims=:" %A in ('tasklist /v /fi "WINDOWTITLE eq test.bat - Notepad"') do @if %A==INFO (echo Prog not running) else SET "BREX=Awesome" &echo %BREX% 

不幸的是,当我运行这个脚本时,它返回了我的else字符串的三个实例?

screenshot

有什么办法来减少这种下降到返回一个实例?

+0

1.您正在设置变量'BREX' *和*在同一命令行/块读它,因此需要[延迟膨胀(http://ss64.com/nt/delayedexpansion.html) 。 2.'tasklist'返回两个标题行,这会导致'for/F'循环重复三次;所以添加'skip = 2'选项。 – aschipfl

+1

只需在任务列表中使用/ NH选项。 – Squashman

回答

0

的每一行如果你真的想从命令提示符,你可以做这一行做到这一点。

cmd /v:on /c "@For /f "Delims=:" %A in ('tasklist /v /nh /fi "WINDOWTITLE eq test.bat - Notepad"') do @if %A==INFO (echo Prog not running) else (SET "BREX=Awesome") &echo !BREX!" 

或者使用一些条件执行。

tasklist /v /nh /fi "WINDOWTITLE eq test.bat - Notepad" |findstr /B /C:"INFO: No tasks are running">nul && (echo Program not running) || (echo Awesome) 
1

您可以改用findstr。你越来越多行输出为你遍历输出

tasklist /v /fi "WINDOWTITLE eq test.bat - Notepad" | findstr /C:"No tasks are running" 
if %errorlevel% NEQ 0 (
    echo awesome 
) else (
    echo Prog not running 
) 
+0

/NH选项删除标题,然后仅输出任务列表中的匹配项。 – Squashman

相关问题