2011-04-28 193 views

回答

1

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

!which matlab 
!which notepad 

(或者使用system代替!)的

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

+0

@小齐棉:我使用的是Windows XP,所以我得到'哪个'不被识别为内部或外部命令,可操作程序或批处理文件。 – 2011-04-28 13:32:23

0

这取决于你对操作系统的了解以及程序的属性。

在Linux上我平时做这样的事情:

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

它并不十分好看,它是远离便携式(我想它不会工作在Windows上,也许只有当你安装Cygwin或类似的东西) 。在Unix中这很容易,因为大多数可执行文件都可以从“路径”(环境变量“路径”)访问,而在Windows中,大多数可执行文件都存储在Windows目录中(它位于默认路径中,因此可以找到它们)或在一个程序文件目录中,我记得还没有。

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

对于Windows我猜你可以搜索程序的所有目录,但这可能有点乏味。

0

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

如果你真的地狱弯曲使用MATLAB搜索驱动器,那么你可以做以下

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

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

+0

规避Windows限制的好方法:-)。 只有几个补充:在Windows上它是一个反斜杠('\'),但我认为MATLAB可以在Windows和Unix上处理一个正常的斜杠作为路径分隔符(你也可以看一下'filesep'正确的一个) 另一方面,通过将整个驱动器添加到MATLAB路径,我最担心的是MATLAB的性能会受到很大的影响(特别是当您调用不存在的函数时)。 – Egon 2011-04-28 15:24:34

+0

@Egon:我知道......我只是向OP指出让MATLAB做一个OS的工作有点不合理。 – abcd 2011-04-28 15:28:16

+0

我知道你知道。但是我希望非常清楚地向OP指出,通过运行该代码,您可能不仅会遇到一次性能下降,而且可能每次尝试访问文件(例如.m-files)时都会导致性能下降。 – Egon 2011-04-28 15:37:15

3

这会不会是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可用于Unix系统和安装有Cygwin的Windows系统:

>> [~,p] = system(sprintf('which "%s"',f)) 

p = 

C:/Program Files (x86)/emacs-mw-a/bin/runemacs.exe 

where可以用Windows 2003 and later

而且在某些情况下,你可以使用winqueryreg拉从注册表信息,例如:

>> notepadEdit = winqueryreg('HKEY_CLASSES_ROOT','Applications\notepad.exe\shell\edit\command') 

notepadEdit = 

C:\Windows\system32\NOTEPAD.EXE %1 
相关问题