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\M3
input包含.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