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 。 
这里是步骤:
- 启动命令行。
-  使用cd C:\M1\M2\M3input包含.m文件的文件夹
-  运行以下命令: 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