2016-08-22 106 views
1

我在Matlab版本之间切换。然而,我有一个巨大的自定义路径列表,我需要移动到新版本。以编程方式向Matlab路径永久添加路径列表

有没有人知道如何做到这一点?

好像命令

for i = 1:numPaths 
    path(path,myPathList{i}) 
end 

只添加路径时间。另外addpath只对一个matlab会话进行时间变化。

回答

4

您可以使用savepath的路径保存到一个文件pathdef.m将MATLAB会话之间持续存在。凡本pathdef.m文件的生活取决于你的当前配置:

savepath保存到一个现有的pathdef.m文件在当前文件夹中当前MATLAB®搜索路径。如果当前文件夹中没有pathdef.m文件,则savepath将搜索路径保存到当前路径上的第一个pathdef.m文件。如果当前路径中没有这样的文件,则savepath将搜索路径保存到MATLAB在启动时位于的pathdef.m文件中。 在启用了用户帐户控制(UAC)的Windows®系统上,可能会提示您允许更新操作,因为它需要管理员级权限。

% Add all paths in myPathList to the path 
addpath(myPathList{:}) 

% Save it so that they are already added in new instances 
savepath 

更新

savepath位于用户的路径上的pathdef.m文件;然而,由于应用程序是从命令行启动的,所以MATLAB的启动目录不是那个位置,所以尽管修改后的路径被保存到pathdef.m文件中,但是在启动应用程序时没有读取它。解决方案是删除此“本地”pathdef.m,以便使用安装目录中的那个。

+0

这不幸的是似乎没有工作。即使我用sudo权利启动Matlab – mcExchange

+0

@mcExchange那怎么办? – Suever

+0

更改不是永久性的。但是真的很奇怪,因为即使使用gui来添加文件夹路径也不是永久性的。也许这是一个错误的Matlab 2014a ... – mcExchange

1

你是幸运的,我不得不处理在工作中确切的问题,人们会保持MATLAB和保存路径的verisions之间的切换可能会导致在某些情况下麻烦了。我写了一个小函数来启动我的startup.m文件,确保所有自定义路径都添加在正在使用的特定MATLAB版本的默认路径之上。请注意,我假设MATLAB存在于C:\ Program Files中,您可以根据需要更改它。

function setPathForNewVersion() 
% Find all path strings which do not belong to toolbox folders 
customFolders = regexp(strsplit(path,';'),... 
    '^(?!C:\\Program Files(\s\(x86\))?\\MATLAB\\R\d{4}(?:a|b)\\toolbox\\\S*)(.*)','match'); 
customFolderCells = [customFolders{cellfun(@(x)~isempty(x),customFolders)}]; % Remove empty cells 

restoredefaultpath; % Momentarily 
newPath = sprintf('%s;',customFolderCells{:}); 
path(newPath, path); % Add the user's custom path to the top 
savepath; 
end 

在你startup.m来,那么你可以有

function startup 
setPathForNewVersion(); 
end 
+0

因此,每次启动Matlab时都会调用此函数?这意味着我必须将函数'setPathForNewVersion'放在一些默认的Matlab路径中?我真的很惊讶,为什么不能简单地存储这些条目而不是在每个启动时都调用它们......也许它是Matlab 2014a中的一个错误... – mcExchange

+0

如果你不在版本之间切换,并且这是一次性过渡,那么它的可以使用'savepath',但如果你经常从一个版本转到另一个版本,最好每次启动时都要这样做。你可以在'startup.m'中添加'setPathForNewVersion'作为子函数 –