2016-08-22 140 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'作爲子函數 –