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

五迷三道 提交于 2019-12-22 10:24:48

问题


In a batch file, I'm opening a window with a specific name like this:

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

So the window title is "My log".

How do you run this command only if the window is not already open. Is there a bat file command to test for this? I'd rather not use a program or a powershell command, just a simple bat file cmd if possible.

Something like this:

@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

回答1:


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

More info on batch. Also see 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.


.
--



回答2:


Always use tasklist, here is an example:

@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

That's right, you can do it on just 2 lines.



来源:https://stackoverflow.com/questions/29582799/how-do-you-test-if-a-window-by-title-is-already-open-from-the-command-prompt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!