在 MATLAB 中查找当前脚本(mlx 文件)的位置

问题描述 投票:0回答:2

我正在多个不同的位置处理我的 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 带来了一个称为实时脚本的新功能。这样一来,这些解决方案就不再起作用了。

%For example I would like to do something like this
cd(MLX_FILELOCATION);
%or
which(mlxfilename)

编辑 III:问题:我无法获取当前打开/执行的 MATLAB 文件的路径/文件位置或名称。使用 *.m 文件,上面的示例可以实现这一点。使用 *.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"

编辑我: 我的第一个目标是我想将“当前文件夹”(->“cd”)更改为运行脚本的路径。 原因:在与 mlx 文件相同的文件夹中,我有包含数据的 .csv 文件。例如,到明天我就有了新文件夹。我复制了 mlx_file,现在我想确保不使用昨天的 csv 文件(因为昨天的当前文件夹显示在 MATLAB 的文件浏览器中)-> 所以我想更改“当前只需将 mlx 文件复制到新文件夹中即可自动自动创建文件夹”。

如果有更好的做法,请告诉我。

感谢您的帮助

编辑二: 使用的工作流程示例: 我编写了一个 MATLAB 脚本。将其保存在文件夹“Dataset_ONE”中。此外,我将“Dataset_ONE.csv”文件复制到同一文件夹中。例如。我现在创建一个绘图并将其另存为文件夹“Dataset_ONE”中的“*.png”。 第二天,我可能会有第二个(一个新的且不同的)数据集“Datasset_TWO”。我创建一个新文件夹“Dataset_TWO”。将 MATLAB 文件复制到新文件夹。在那里打开 MATLAB 文件。然后,由于默认设置,MATLAB 已将“当前文件夹”更改为我打开 MATLAB 的新文件夹。 但是,如果我现在再次打开第一个文件夹中的 MATLAB 脚本(同时打开其他数据集 MATLAB 脚本),我必须小心当前文件夹。 在这种情况下,使用所描述的解决方案可能会很有用。

matlab directory cd
2个回答
1
投票

如果您想要某种方法来防止您在没有意识到的情况下在错误的数据上运行错误的脚本,那么您可以在每个脚本的顶部添加一条安全指令,如果您的当前目录与以下目录不同,则会抛出错误您正在运行的脚本的位置。例如

>> assert (strcmp (pwd, '/absolute/path/to/my/script'));

至于加载正确的数据/保存到正确的位置,只需使用绝对路径加载和保存,就不会有混乱。


0
投票

至少从 MATLAB 2023b 开始,您的“示例 2”现在可以在实时脚本中运行。

跑步

>> temp = matlab.desktop.editor.getActive
>> f = temp.Filename

会将当前实时脚本的绝对路径检索到

f
中。即使在实时脚本中仅运行单个单元格时,这也有效 -
MatlabEvaluationHelper
LiveEditorEvaluationHelper*
不再复杂。

现在也可以缩短为

>> f = matlab.desktop.editor.getActiveFilename

>> doc matlab.desktop.editor.getActiveFilename

获取更详细的文档。

© www.soinside.com 2019 - 2024. All rights reserved.