【发布时间】:2016-08-06 09:10:06
【问题描述】:
我正在多个不同的位置处理我的 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)
(Edit III:问题:我无法获取当前打开/执行的 MATLAB 文件的路径/文件位置或名称。使用 *.m 文件可以通过示例上面。使用 *.mlx-files 不再可能。我更喜欢使用 *.mlx-files 而不是 *.m-files。)
在 *.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 脚本),我必须小心当前文件夹。 在这种情况下,拥有所描述的解决方案可能会很有用。
【问题讨论】:
-
KLJ 我还不太清楚您要做什么。听起来您只是想将一堆文件夹添加到 matlab 路径中以使其始终可以访问,这非常简单...
-
@tasos-papastylianou:见上面的“编辑 I”。感谢您的提问。
-
这真的取决于你如何启动 matlab,你的启动脚本中有什么等......请写一个你想要的工作流程的例子,包括你如何以及从哪里启动 matlab,你的文件夹结构就所有相关文件而言,一般来说,matlab 的初始目录是什么,您希望它在哪里,以及您希望访问什么(以及您希望 不喜欢它访问)。
-
我有同样的问题 - 我需要从脚本所在的同一文件夹(或子文件夹)加载数据,但如果我在不同文件夹中运行脚本,Matlab在找不到文件之前没有任何问题。使用脚本,Matlab 会自动询问您是否要更改文件夹。我也想一样,还是自动换文件夹。我不能使用绝对路径,因为我在不同的计算机上运行脚本。
-
仅供参考,示例 2 适用于我(Matlab 2020b)并返回 .mlx 脚本所在的正确本地文件路径。