【问题标题】:Finding the path of installed program from MATLAB?从 MATLAB 中查找已安装程序的路径?
【发布时间】:2011-04-28 12:25:30
【问题描述】:

我可以从 MATLAB 命令行中找出具体程序的安装路径是什么吗? 或者我可以找到注册程序的路径(Windows reg 等效项)?

【问题讨论】:

    标签: matlab path installation


    【解决方案1】:

    这不是 100% 可靠的,但大多数情况下都会得到正确答案:

    function p = findOnSystemPath(f)
    p = '';
    path = getenv('path');
    dirs = regexp(path,pathsep,'split');
    for iDirs = 1:numel(dirs)
        tp = fullfile(dirs{iDirs},f);
        if exist(p,'file')
            p = tp;
            break
        end
    end
    

    示例用法:

    >> findOnSystemPath('runemacs.exe')
    
    ans =
    
    C:\Program Files (x86)\emacs\bin\runemacs.exe
    

    根据您的操作系统,您可能可以直接从系统获取此信息:

    which 可用于安装了Cygwin 的 Unix 系统和 Windows 系统:

    >> [~,p] = system(sprintf('which "%s"',f))
    
    p =
    
    C:/Program Files (x86)/emacs-mw-a/bin/runemacs.exe
    

    whereWindows 2003 and later 上可用:

    >> [~,p] = system(sprintf('where "%s"',f))
    
    p =
    
    C:\Program Files (x86)\emacs-mw-a\bin\runemacs.exe
    

    在某些情况下,您可以使用winqueryreg 从注册表中提取此信息,例如:

    >> notepadEdit = winqueryreg('HKEY_CLASSES_ROOT','Applications\notepad.exe\shell\edit\command')
    
    notepadEdit =
    
    C:\Windows\system32\NOTEPAD.EXE %1
    

    【讨论】:

      【解决方案2】:

      调用DOS/bash命令which,例如,

      !which matlab
      !which notepad
      

      (或使用system 代替!。)

      编辑:在 Windows 中似乎没有直接的等价物。我在尝试过的(Win XP)机器上安装了cygwin,命令成功。或者,在stackoverflowsuperuser 上查看这些答案。

      【讨论】:

      • @richie-cotton:我使用的是 windows xp,所以我得到 'which' 不是内部或外部命令、可运行程序或批处理文件。
      【解决方案3】:

      这取决于您对操作系统的了解以及您的程序具有哪些属性。

      在 Linux 上,我通常会这样做:

      [error, path] = system(sprintf('which "%s"',programName));
      

      它看起来并不漂亮,而且离便携性还很远(我想它在 Windows 上无法运行,也许只有安装 Cygwin 或类似的东西)。在 Unix 中要容易得多,因为大多数可执行文件都可以从“路径”(环境变量“路径”)访问,而在 Windows 中,大多数可执行文件要么存储在 Windows 目录中(在默认路径中,因此可以找到它们)或在我记得的程序文件目录中。

      发现程序时Error = 0,path 显然包含可执行文件的路径。

      对于 Windows,我想您可以搜索所有目录以查找该程序,但这可能有点乏味。

      【讨论】:

        【解决方案4】:

        MATLAB 并不是真正设计用于在驱动器上的任何位置搜索文件的工具。这是最好留给操作系统的任务,而 Egon 建议您应该做的事情。只需将which 替换为 DOS 中的等效项(您应该已经知道这一点,否则只需在 MS-DOS/Windows 标记中提出另一个问题。它可能已经被回答了。)。

        如果您真的一心想使用 MATLAB 搜索驱动器,那么您可以执行以下操作

        addpath(genpath('C:\')); %#' I am not sure which way the slash is
        which filename
        

        当心,第一步需要一段时间。

        【讨论】:

        • 绕过 Windows 限制的好方法 :-)。只是一些补充:在 Windows 上它是一个反斜杠 (\ ),但我认为 MATLAB 可以在 Windows 和 Unix 上处理普通斜杠作为路径分隔符(您也可以查看 filesep 以获得正确的一)另一方面,通过将你的整个驱动添加到 MATLAB 路径中,我最大的担心是 MATLAB 的性能会受到很大影响(尤其是当你调用不存在的函数时)。
        • @Egon:我知道...我只是向 OP 指出,让 MATLAB 做操作系统的工作有点不合理。
        • 我知道你知道。但我想非常清楚地向 OP 指出,您可能不仅会因运行该代码而导致性能下降,而且可能每次您尝试访问文件(例如 .m-files)时都会受到影响。
        • @Egon:你说得对,我应该向 OP 提到这一点。谢谢你这样做:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多