Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 标识命名窗口是否打开然后关闭的批处理文件_Batch File_Cmd - Fatal编程技术网

Batch file 标识命名窗口是否打开然后关闭的批处理文件

Batch file 标识命名窗口是否打开然后关闭的批处理文件,batch-file,cmd,Batch File,Cmd,我一直在使用下面的脚本来检查特定的命名窗口是否打开 我是从这条线得到的:- 理想情况下,如果发现窗口打开,我将展开else部分以关闭窗口 @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部分以关闭窗口

@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字符串的三个实例


有没有办法把这个问题简化为返回一个实例?

您可以使用
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
)

如果您真的想使用cmd提示符中的一行来执行此操作,则可以执行此操作

 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.您正在设置变量
BREX
并在同一命令行/块中读取它,因此需要。2.
tasklist
返回两个标题行,这会导致/F循环迭代三次;因此,添加
skip=2
选项。只需将/NH选项与任务列表一起使用即可。/NH选项删除标题,然后仅输出任务列表中的匹配项。