我正在许多不同的位置处理我的MATLAB代码,如果我能让代码知道它在计算机上的位置,那将非常有用。直到现在我使用.m文件。对于.m文件,我找到了以下解决方案:
%example 1
cd(fileparts(mfilename('fullpath')))
或
%example 2
tmp = matlab.desktop.editor.getActive;
cd(fileparts(tmp.Filename));
或
%example 3
S = dbstack('-completenames');
S(1).file
或
%example 4
which(mfilename)
但是使用MATLAB 2016a,出现了一个名为live script的新功能。由此,这些解决方案不再适用。
%For example I would like to do something like this
cd(MLX_FILELOCATION);
%or
which(mlxfilename)
(编辑III :问题:我无法获取当前打开/执行的MATLAB文件的路径/文件位置或名称。使用* .m-files这可以通过示例实现使用* .mlx文件不再可能。我更喜欢使用* .mlx文件而不是* .m文件。)
上述示例的输出在* .mlx文件中执行:
%example1: mfilename returns the path to the 'MatlabEvaluationHelper' in the 'AppData\Local\Temp'-folder
%example2: output is an empty array
%example3: same output as example1
%example4: same output as example1, because mfilename returns "MatlabEvaluationHelper"
编辑I: 我的第一个目标是我想将“当前文件夹”( - >“cd”)更改为正在运行的脚本的路径。 原因:在与mlx文件相同的文件夹中,我有例如带有数据的.csv文件。例如明天我有新的文件夹。我复制mlx_file,现在我想确保我不使用昨天的csv文件(因为昨天的当前文件夹显示在MATLAB的文件浏览器中) - >所以我想自动更改“当前文件夹”,只需将mlx文件复制到新文件夹中即可。
如果有更好的做法,请告诉我。
感谢您的帮助
编辑II: 已使用工作流程的示例: 我编写了一个MATLAB脚本。将其保存在“Dataset_ONE”文件夹中。进一步确保我将“Dataset_ONE.csv”文件复制到同一文件夹中。例如。我现在创建一个绘图并将其保存为“* .png”文件夹“Dataset_ONE”。 我可能有第二个(一个新的和有不同的)数据集“Datasset_TWO”的第二天。我创建了一个新文件夹“Dataset_TWO”。将MATLAB文件复制到新文件夹。在那里打开MATLAB文件。然后,由于默认设置,MATLAB已将“当前文件夹”更改为我打开MATLAB的新文件夹。 但是,如果我现在再次在第一个文件夹中打开MATLAB脚本(与其他数据集MATLAB脚本同时打开),我必须小心当前文件夹。 在这种情况下,获得所描述的解决方案可能是有用的。
答案 0 :(得分:0)
如果你想要的是某种阻止你在错误的数据上运行错误的脚本而没有意识到的方法,那么你可以在每个脚本的顶部添加一个安全指令,如果当前目录不是与您正在运行的脚本的位置相同。 e.g。
>> assert (strcmp (pwd, '/absolute/path/to/my/script'));
至于将正确的数据/保存加载到正确的位置,只需使用绝对路径加载和保存,应该没有混淆。