我在使用批处理文件或仅使用 dos() 函数在 matlab 中运行程序时遇到问题。我现在可以使用以下命令打开程序并使用输入运行它:
启动程序.exe输入.mdu
但是当计算完成时,它不会自行关闭。我尝试过 taskkill、taskkill 与 /wait、close、quit、end、done 等的组合。我对此完全没有经验,也找不到有关此问题的任何信息。当我尝试不同的命令时,我要么根本无法让它关闭,要么它在计算完成之前就关闭了。
我可以通过使用 taskkill 让它在 cmd 中运行。然后它会等待直到程序完成,但是当我将它放入批处理文件或 Matlab 中的 dos 函数中时,问题就开始出现。
答案1
您是否尝试过使用!program.exe input.mdu
?这应该在 program.exe 运行后将控制权返回给 Matlab。请参阅感叹号部分help punct
编辑:如果程序不退出,这将无济于事。
答案2
如果您在不使用start
命令(创建新窗口)的情况下启动程序,如下所示:
program.exe input.mdu
您可以按 来终止它CTRL+BREAK
。
如果您必须使用start
来运行程序 - 您应该在程序窗口获得焦点时按下该组合键。
来自 MSDN (关联):
CTRL+C 和 CTRL+BREAK 组合键由控制台进程进行特殊处理。默认情况下,当控制台窗口具有键盘焦点时,CTRL+C 或 CTRL+BREAK 被视为信号(SIGINT 或 SIGBREAK),而不是键盘输入。默认情况下,这些信号会传递给连接到控制台的所有控制台进程。(...) CTRL+BREAK 始终被视为信号,但应用程序可以更改默认的 CTRL+C 行为(...)
答案3
使用批处理文件可以很容易地终止一个进程,但是 DOS(或者更可能是 Windows 命令会话,它是不是DOS 中的用户如何知道 MATLAB 何时完成计算?您可以让 MATLAB 在计算完成时写入文件并将其用作信号。但我认为您的做法完全错误。
MATLAB 知道什么时候完成,对吧?而且你必须有某种类型的 MATLAB 脚本来运行你的计算。MATLAB 有一个EXIT 命令。
因此只需将 EXIT 命令合并到您的 MATLAB 脚本中。
答案4
好的,感谢您花时间解决我的问题,但我现在认为没有真正的解决方案。我给程序制作者发了一封邮件,要求他们提供一些可以在模拟后自动关闭的功能。他们现在正在帮我做这件事。所以无论如何,谢谢你们!