Matlab:从命令行运行一个m文件

假设;

我在位置有一个m文件:
C:\M1\M2\M3\mfile.m

而matlab的exe文件就在这个位置:
C:\E1\E2\E3\matlab.exe

我想用Matlab从命令行运行这个m文件,例如在一个.bat文件中。 我怎么能做到这一点,有没有办法做到这一点?

像这样的命令成功运行m文件:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');"

我认为在前面的答案中没有提到的一个重点是,如果没有明确指出,matlab解释器将保持打开状态。 因此,对于@hkBattousai的回答,我将添加exit命令:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"

这里是我将使用,而不是从脚本中优雅地处理错误:

 C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch, exit, end, exit" 

如果你想要更多的冗长:

 C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch me, fprintf('%s / %s\n',me.identifier,me.message), end, exit" 

我在这里find了原始的参考。

在Linux上,你可以做同样的事情,你可以发回一个自定义的错误代码,如下所示:

 #!/bin/bash matlab -nodisplay -nojvm -nosplash -nodesktop -r \ "try, run('/foo/bar/my_script.m'), catch, exit(1), end, exit(0);" echo "matlab exit code: $?" 

它打印matlab exit code: 1如果脚本抛出exception, matlab exit code: 0否则matlab exit code: 0

这里是步骤:

  1. 启动命令行。
  2. 使用cd C:\M1\M2\M3input包含.m文件的文件夹
  3. 运行以下命令: C:\E1\E2\E3\matlab.exe -r mfile

Windows系统将使用您当前的文件夹作为MATLABsearch.m文件的位置, -r选项尝试在启动时立即启动给定的.m文件。

 cat 1.m | matlab -nodesktop -nosplash 

我使用Ubuntu

感谢malat。 您的评论帮助了我。 但是我想添加我的try-catch块,因为我find了MExeption方法getReport() ,它返回整个错误信息并将其打印到matlab控制台。

此外,我打印文件名,因为这个编译是调用MATLAB的批处理脚本的一部分。

 try some_code ... catch message display(['ERROR in file: ' message.stack.file]) display(['ERROR: ' getReport(message)]) end; 

对于传递给遗留代码生成方法的假模型名称,输出将如下所示:

 ERROR in file: C:\..\..\.. ERROR: Undefined function or variable 'modelname'. Error in sub-m-file (line 63) legacy_code( 'slblock_generate', specs, modelname); Error in m-file (line 11) sub-m-file Error in run (line 63) evalin('caller', [script ';']); 

最后,要显示在Windows命令提示符窗口的输出,只需将-logfile logfile.txt (另外使用-wait )login到一个文件并调用批处理命令type logfile.txt