【问题标题】:Find location of current script (mlx-file) in MATLAB在 MATLAB 中查找当前脚本(mlx 文件)的位置
【发布时间】: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 脚本所在的正确本地文件路径。

标签: matlab directory cd


【解决方案1】:

如果您想要某种方式来防止您在没有意识到的情况下对错误的数据运行错误的脚本,那么您可以在每个脚本的顶部添加一个安全说明,如果您的当前目录不是与您正在运行的脚本的位置相同。例如

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

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

【讨论】:

  • 感谢您的回答。这很好,但我正在寻找绝对路径的全自动生成来正确地更改“当前文件夹”。是否有其他解决方案?
  • 通过完全自动生成绝对路径,您可以在不同的 PC 上运行相同的文件夹而不会出现任何问题。
  • 如果文件是唯一的并且在 matlab 路径上,那么您可以使用 which 命令获取其完整路径。我没有 matlab 2016,所以我无法测试 mlx 文件,但大概如果它们是可运行的,那么它们也应该被 which 命令检测到。您可以使用此输出自动执行所需的检查。话虽如此,许多“自动化”请求通常都没有经过深思熟虑。您只能自动化“检查和程序”。你不能神奇地猜测未定义的行为。在我看来,无论您如何不可预测地对待文件,您都想要“正常工作”的东西......
  • 你是对的,一般来说,可以通过“which”获得路径。抱歉,我忘记了那种例子。我刚刚更新了上面的例子。现在我的问题是我无法获取当前脚本的文件名(mfilename 在 mlx 文件中不起作用)。所以我不知何故需要一个函数“mlxfilename”。
  • @KLJ 抱歉,我无法提供更具体的帮助,因为我没有 matlab 2016 来测试解决方案:/
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 2013-08-02
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多