2014-05-07 183 views
2

我有一個文件夾在外部驅動器上有50多個文件夾,每個文件夾有2000多個文件。這50個文件夾中的每一個都沒有子文件夾。我想在MATLAB搜索路徑中添加所有文件,因此我執行addpath(genpath(...))。大約需要5分鐘。如果文件夾位於搜索路徑中,我不想再次重複該操作。我如何確定?如何檢查一個文件夾是否在搜索路徑

我知道我可以使用which來測試一個文件是否在搜索路徑上,但是我想查看主文件夾(有50個子文件夾)和子文件夾是否在搜索路徑中。我怎麼做?

我甚至嘗試過使用exist命令,但即使文件夾不在搜索路徑上,它也會給出非零值。

+0

在您可以使用的子目錄之一中是否有m文件? 'exist'對於文件夾是相同的,但是如果在那裏有一個函數,你可以檢查函數是否在你的路徑上。 – Raab70

+0

不,沒有.m文件。它的一個文件夾 - > 50個文件夾 - > 2000個文件夾中的每個文件夾。下面給出的答案完美。 –

回答

3

單目錄搜索的情況下

%%// path_to_be_searched is the folder or directory to be detected 
%%// to be in path or not 

%%// colon is the separator used for paths under Linux. 
%%// For Windows and others, it needs to be investigated. 
path_list_cell = regexp(path,pathsep,'Split') 

if any(ismember(path_to_be_searched,path_list_cell)) 
    disp('Yes, this directory is in MATLAB path'); 
else 
    disp('No, this directory is not in MATLAB path'); 
end 

與子目錄搜索的情況下沿着主目錄中添加選項

對於基本路徑非常久遠分目錄搜索,下面的代碼會嘗試找到每個子目錄的匹配項以及basepath並添加缺失的項目。因此,即使您已選擇性地刪除路徑中的任何子目錄或基路徑,此代碼也會照顧添加路徑中缺少的所有內容。

%%// basepath1 is the path to the main directory with sub-directories that 
%%// are to detected for presence 

basepath_to_be_searched = genpath(basepath1) 
basepath_list_cell = regexp(basepath_to_be_searched,pathsep,'Split') 

%%// Remove empty cells 
basepath_list_cell = basepath_list_cell(~cellfun(@isempty,basepath_list_cell)) 

path_list_cell = regexp(path,pathsep,'Split'); 

ind1 = ismember(basepath_list_cell,path_list_cell) 

%%// Add the missing paths 
addpath(strjoin(strcat(basepath_list_cell(~ind1),pathsep),'')) 

%%// strjoin is a recent MATLAB addition and is also available on file-exchange - 
%%// http://www.mathworks.in/matlabcentral/fileexchange/31862-strjoin 
+0

感謝此代碼。我通過編輯你的代碼來添加Windows版本。保持它,如果你覺得合適。另外,我會建議你的代碼改變。而不是'any(ismember(...))',您可以反轉輸入參數並將其寫爲'(ismember(path_to_be_searched,path_list_cell))'。這樣你將得到與第一個參數相同的長度數組。這使得這個過程更容易。我會等一會兒接受你的回答。 –

+1

@ ParagS.Chandakkar很少修改 - 1.添加了'pathsep',它必須處理Linux和Windows之間的冒號和分號問題。 2.我已經添加了使用'path_to_be_searched'作爲第一個arg到'ismember'的建議,並且它在這裏完全適用。 3.添加**主目錄以及子目錄搜索案例**,我認爲這是您的主要目標,這也讓我們添加了缺失的路徑。希望這能解決你所有的煩惱! – Divakar

相關問題