如何通过命令提示符测试窗口(按标题)是否已经打开?

3
在批处理文件中,我通过以下方式打开一个指定名称的窗口:
@echo off    
start "my log" /D \logs\ /I powershell -nologo -noexit -command "$host.ui.RawUI.WindowTitle = 'My log'"; get-content logfile.log -wait

所以窗口标题是“My log”。

如果窗口还没有打开,您该如何运行此命令?是否有批处理文件命令可用于测试此情况?如果可能的话,我不想使用程序或PowerShell命令,而只想使用简单的批处理命令。

类似于这样:

@echo off    
if EXISTS window("My log") goto skip

start "my log" /D \logs\ /I powershell -nologo -noexit -command "$host.ui.RawUI.WindowTitle = 'My log'"; get-content logfile.log -wait

:skip
2个回答

6
@For /f "Delims=:" %A in ('tasklist /v /fi "WINDOWTITLE eq New Folder"') do @if %A==INFO echo Prog not running

更多有关批处理的信息,请参见for /?命令。

&    seperates commands on a line.

&&    executes this command only if previous command's errorlevel is 0.

||    (not used above) executes this command only if previous command's errorlevel is NOT 0

>    output to a file

>>    append output to a file

<    input from a file

|    output of one command into the input of another command

^    escapes any of the above, including itself, if needed to be passed to a program

"    parameters with spaces must be enclosed in quotes

+ used with copy to concatinate files. E.G. copy file1+file2 newfile

, used with copy to indicate missing parameters. This updates the files modified date. E.G. copy /b file1,,

%variablename% a inbuilt or user set environmental variable

!variablename! a user set environmental variable expanded at execution time, turned with SelLocal EnableDelayedExpansion command

%<number> (%1) the nth command line parameter passed to a batch file. %0 is the batchfile's name.

%* (%*) the entire command line.

%<a letter> or %%<a letter> (%A or %%A) the variable in a for loop. Single % sign at command prompt and double % sign in a batch file.


.
--

除了serenity的答案之外: 在Windows 7上,我不得不将文本%A == INFO更改为%A == Info(小写)。 tasklist的输出似乎有所不同。 - user3860088
@Serenity 这是我在这个网站上看到的最好的答案之一。赞。 - Mark Deven

0

始终使用任务列表,这是一个例子:

@echo off
for /f "tokens=*" %%a in ('tasklist /fi "WINDOWTITLE eq My log"') do if "%%a" == "INFO: No tasks are running which match the specified criteria." start "my log" /D \logs\ /I powershell -nologo -noexit -command "$host.ui.RawUI.WindowTitle = 'My log'"; get-content logfile.log -wait

没错,你只需要两行代码就可以实现它。


这与四年前的被接受答案有何不同? - ciso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接