【发布时间】:2011-04-28 12:25:30
【问题描述】:
我可以从 MATLAB 命令行中找出具体程序的安装路径是什么吗? 或者我可以找到注册程序的路径(Windows reg 等效项)?
【问题讨论】:
标签: matlab path installation
我可以从 MATLAB 命令行中找出具体程序的安装路径是什么吗? 或者我可以找到注册程序的路径(Windows reg 等效项)?
【问题讨论】:
标签: matlab path installation
这不是 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
where 在Windows 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
【讨论】:
调用DOS/bash命令which,例如,
!which matlab
!which notepad
(或使用system 代替!。)
编辑:在 Windows 中似乎没有直接的等价物。我在尝试过的(Win XP)机器上安装了cygwin,命令成功。或者,在stackoverflow 和superuser 上查看这些答案。
【讨论】:
这取决于您对操作系统的了解以及您的程序具有哪些属性。
在 Linux 上,我通常会这样做:
[error, path] = system(sprintf('which "%s"',programName));
它看起来并不漂亮,而且离便携性还很远(我想它在 Windows 上无法运行,也许只有安装 Cygwin 或类似的东西)。在 Unix 中要容易得多,因为大多数可执行文件都可以从“路径”(环境变量“路径”)访问,而在 Windows 中,大多数可执行文件要么存储在 Windows 目录中(在默认路径中,因此可以找到它们)或在我记得的程序文件目录中。
发现程序时Error = 0,path 显然包含可执行文件的路径。
对于 Windows,我想您可以搜索所有目录以查找该程序,但这可能有点乏味。
【讨论】:
MATLAB 并不是真正设计用于在驱动器上的任何位置搜索文件的工具。这是最好留给操作系统的任务,而 Egon 建议您应该做的事情。只需将which 替换为 DOS 中的等效项(您应该已经知道这一点,否则只需在 MS-DOS/Windows 标记中提出另一个问题。它可能已经被回答了。)。
如果您真的一心想使用 MATLAB 搜索驱动器,那么您可以执行以下操作
addpath(genpath('C:\')); %#' I am not sure which way the slash is
which filename
当心,第一步会需要一段时间。
【讨论】:
\ ),但我认为 MATLAB 可以在 Windows 和 Unix 上处理普通斜杠作为路径分隔符(您也可以查看 filesep 以获得正确的一)另一方面,通过将你的整个驱动添加到 MATLAB 路径中,我最大的担心是 MATLAB 的性能会受到很大影响(尤其是当你调用不存在的函数时)。