【问题标题】:Matlab - Path to the Current ScriptMatlab - 当前脚本的路径
【发布时间】:2016-06-15 08:38:07
【问题描述】:

在任何两年前版本的 MATLAB 下,我正在寻找 当前脚本正在执行的路径强>(参考12345),

比方说,对于一个脚本,一般来说,当用户运行一个脚本时:

  • “运行”、“运行和前进”、“运行部分”或“运行和时间”菜单按钮,
  • 编辑器中的“评估选择”或“评估当前选择”上下文菜单,
  • 编辑器中的 F9 或 Ctrl+Enter 键盘快捷键。

解决方案无法接受的用户过程是:

  • 直接在命令行中执行一段代码,
  • 用于从 Matlab 界面或编辑器 - 文档、浏览器、帮助之外的窗口执行代码的上下文或键盘快捷键。

与功能相关的问题范围之外的用户程序是:

  • 从命令行、另一个脚本或函数将脚本作为函数调用。

不是函数,它可以通过以下任何一种方法轻松完成:

mfilename
mfilename('fullpath') 
which(mfilename)
which('mfilename')
S = dbstack('-completenames');S(1).file
[folder,name,ext] = fileparts(which('object'))

这当然和通过以下方式请求当前文件夹不一样:

cd
pwd

【问题讨论】:

  • 您能更准确地了解mfilename 的问题吗?它也适用于脚本,至少在 Ubuntu 下使用 R2016a 上的“运行”和类似按钮。
  • 我有Matlab R2014b + Windows 8,模式是选择一段代码运行,结果是''。正在手动执行脚本或脚本片段...这是 mfilename 的标准行为。
  • 我怀疑您是否会找到“评估选择”模式的解决方案,因为它就像将代码复制并粘贴到命令窗口中。然后代码与任何文件完全无关。
  • 没错,但我不是 100% 确定。也许有一个间接的方法,能够请求接口的执行范围。我不会丢弃能够从 matlab 本地提供该信息的 java 程序。
  • 当您使用您提到的方法执行代码时,MATLAB 几乎只是复制代码并eval在基础工作区中将其复制。正如@Ratbert 所说,它不再与特定的.m 文件相关,因此不能指望mfilename 起作用,并且您不会从dbstack 获得有用的范围。我认为 matlabgui 的答案与您将得到的一样接近,但即使这样也很容易失败。

标签: matlab function


【解决方案1】:

编辑我最初误解了这个问题......

因此,希望您能更好地理解并尝试使用:

matlab.desktop.editor.getActiveFilename

在编辑器中获取当前活动文件 -> 应该给出当前脚本...

注意:这是一个未记录的函数,可能会在版本之间发生变化 -> 它为我提供了 r2015b 中的活动文件名。

【讨论】:

  • 这与 OP 的要求无关:源脚本可以在路径中的任何位置,没有理由让它在当前文件夹中。
  • @Ratbert - 事实上,我认为我的第一个答案很简单......所以一定遗漏了一些东西
  • 好收获!但是对于由另一个脚本调用的脚本,或者直接从命令行调用脚本(它可能完全不能在编辑器中打开......)
  • 是的 - 但在那种情况下mfilename 应该可以工作......所以可能完整的解决方案可能是两者的结合?
  • 确实如此。您将调用mfilename,如果为空,则获取matlab.desktop.editor.getActiveFilename 的值。我看到的唯一警告(目前)是,当直接从命令窗口执行代码时,它会给你一个误报。正常行为将是一个空结果,而此方法将在编辑器中返回活动文件,该文件可以是任何东西,并且与执行的代码完全无关。
猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2012-01-21
相关资源
最近更新 更多