Batch file 标识命名窗口是否打开然后关闭的批处理文件
我一直在使用下面的脚本来检查特定的命名窗口是否打开 我是从这条线得到的:- 理想情况下,如果发现窗口打开,我将展开else部分以关闭窗口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% 不幸的是,当我运行这个脚本时,它返
@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选项删除标题,然后仅输出任务列表中的匹配项。