MATLAB Answers

0

close cmd window after executable

Tyler Murray さんによって質問されました 2016 年 9 月 27 日
最新アクティビティ Walter Roberson
さんによって コメントされました 2016 年 11 月 25 日
I am running an external .bat file through matlab. The code is as follows:
fileName = uigetfile('*.*');
cmd = sprintf(program.bat "%s" &', fileName);
system(cmd);
The user gets to pick which file is run through the .bat file and then it runs. The problem I am trying to solve, which I am not even sure it's possible, is to close the cmd window after it is done autonomously. The reason this is difficult is because after the program is done running, if you press enter, it prompts excel to open and displays the results in excel which I am trying to avoid. Thus, I don't think I can write a simple exit command. I also do not have access to the batch file to rewrite that code.

  1 件のコメント

Jan
2016 年 11 月 24 日
How can you notice, that your external program is ready?

サインイン to comment.

2 件の回答

Walter Roberson
回答者: Walter Roberson
2016 年 9 月 27 日
 採用された回答

There are a few approaches:
  1. Java Robot Class to position on top of the command window and send the key/mouse sequence to close it;
  2. call taskmanager to kill the process
  3. instead of using system() use one of the activex / DCOM methods to create a process and send it a command line; you can then also kill off the process. I know this is possible, and I know someone showed how to create a process not long ago, but I am having difficulty finding the appropriate sequence at the moment.

  3 件のコメント

Tyler Murray 2016 年 9 月 27 日
Thanks for the start! Glad to know its possible haha I'll keep giving it a shot. If you remember the sequence please post it here!
Tyler Murray 2016 年 9 月 29 日
Do you have any experience with Java Robot Class? I can't find anything online with how to position the cursor over the command window or any program?
Walter Roberson
2016 年 9 月 29 日

サインイン to comment.


Mikhail
回答者: Mikhail
2016 年 11 月 24 日

Much easier:
fileName = uigetfile('*.*');
cmd = sprintf('start program.bat "%s"', fileName);
system(cmd);

  7 件のコメント

Walter Roberson
2016 年 11 月 25 日
I did overlook the start. But your solution assumes that the process ends nicely by itself. In the user's case the process hangs around waiting for return to be pressed. Though I am not sure how it would read that if input is disconnected as I would expect when & is used, unless it is opening a graphics window.
Mikhail
2016 年 11 月 25 日
It the process doesn't exit by itself, wrap it in another bat file like that:
my.bat:
REM exit after 5 seconds
@ping 127.0.0.1 -n 5 -w 1000 > nul
my_wrapper.bat:
call my.bat
exit
Then:
system('start my_wrapper.bat')
That is all to it.
Walter Roberson
2016 年 11 月 25 日
Now try again with a process that does not exit by itself -- for example a ping that would go on forever until it is interrupted.
The user wants to be able to start an asynchronous process of indefinite duration and kill it at some later time before it has finished. The solutions I gave are various methods of killing asynchronous processes.

サインイン to comment.



Translated by