Нахождение пути установленной программы из MATLAB? - PullRequest
2 голосов
/ 28 апреля 2011

Могу ли я узнать из командной строки MATLAB, каков путь установки конкретной программы?Или я могу найти путь для зарегистрированной программы (эквивалент Windows reg)?

Ответы [ 4 ]

3 голосов
/ 28 апреля 2011

Это не будет на 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 и Windows с Cygwin :

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

p =

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

where доступно в Windows 2003 и более поздних версиях :

>> [~,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
1 голос
/ 28 апреля 2011

Вызовите команду DOS / bash which, например,

!which matlab
!which notepad

(или используйте system вместо !.)

РЕДАКТИРОВАТЬ: Кажется, что нет прямого эквивалента в Windows.Я установил Cygwin на компьютер (Win XP), на котором попробовал, и команда прошла успешно.В качестве альтернативы взгляните на эти ответы по stackoverflow и superuser .

0 голосов
/ 28 апреля 2011

MATLAB на самом деле не предназначен для использования в качестве инструмента для поиска файлов в любом месте на диске.Эту задачу лучше всего оставить ОС, и Egon предложил именно то, что вам следует делать.Просто замените which на эквивалент в DOS (вы должны это знать, иначе просто задайте другой вопрос в теге MS-DOS / Windows. Возможно, на него уже есть ответ.).

Если вы на самом деле черт возьми, используя MATLAB для поиска диска, затем вы можете сделать следующее

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

Осторожно, первый шаг займет некоторое время.

0 голосов
/ 28 апреля 2011

Это зависит от того, что вы знаете об ОС и какими свойствами обладает ваша программа.

В Linux я обычно делаю что-то вроде:

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

Это не выглядит красиво, и это далеко от портативности (я полагаю, это не будет работать в Windows, возможно, только если вы установите Cygwin или что-то подобное). В Unix это намного проще, так как большинство исполняемых файлов доступны по «пути» (переменная среды «путь»), в то время как в Windows большинство исполняемых файлов хранятся либо в каталоге Windows (который находится в пути по умолчанию, поэтому они находятся), либо в каталоге Program Files, который, насколько я помню, не таков.

Ошибка = 0, когда программа найдена, а path тогда, очевидно, содержит путь к исполняемому файлу.

Для Windows, я думаю, вы можете искать программу во всех каталогах, но это может быть несколько утомительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...