2017-04-09 46 views
1

我想運行從不同的文件夾中的多個腳本通過一個腳本通過使用一個腳本

例如運行從不同的文件夾不同的MATLAB腳本我有以下代碼:

Original_AddRun1 = 'F:\UPT\Root\Run\S1.m'; 
Original_AddRun2 = 'F:\UPT\Root\Run2\S2.m'; 
Original_AddRun3 = 'F:\UPT\Root\Run3\S3.m'; 
Original_AddRun4 = 'F:\UPT\Root\Run4\Subfolder\S4.m'; 

run(Original_AddRun1); 
run(Original_AddRun2); 
run(Original_AddRun3); 
run(Original_AddRun4); 

有四個劇本,我想要運行(S1.m,S2.m,S3.m和S4.m)它們位於文件夾(Run4,Run2,Run3和子文件夾Run4內)

上面的Matlab是在具有所有文件夾的「根」文件夾

然而,當我運行的代碼下面的錯誤發生

Undefined function or variable 'Original_AddRun2'. 

Error in AllRun (line 7) 
run(Original_AddRun2); 

第一個腳本運行,我得到的人物情節我想,但是當它試圖運行第二個腳本停止,每一個人腳本的作品完美和之前

記住是S2.m需要通過S1.m產生的變量工作進行了測試,同樣與S3.m需要S2.m的產生變量和S4.m需要S3.m的產生變量...這就是爲什麼這些腳本需要按順序運行,並且Function不能使用,因爲它使用它自己的工作空間不是一般的工作區

我以前save()保存一般工作區在每個腳本結束然後清除一般的工作空間,以便能夠運行,那麼在腳本中使用load() 下一個腳本加載我需要的變量再次向廣大工作區使用它們

我覺得有一個更簡單的做這樣的迂迴的方式save()load()

+2

也許你叫'clear'在第一個腳本?作爲解決方案,您可以使用功能而不是腳本。 – m7913d

+0

你爲什麼想這樣做?你想達到什麼目的? –

+0

如果您從命令行手動運行腳本,將會有所幫助。假設他們都在你的道路上, 會S1,然後S2(執行S1後)工作?你的S1是否有任何副作用使得S2的執行不可能?我最好的選擇是:例如,你是否在S1的末尾和/或S2的開頭清除了所有的變量?在這種情況下,工作區中不再有任何變量(這就是爲什麼Original_AddRun2沒有定義) –

回答

-1

@ m7913d @pacta_sunt_servanda我做了一些研究,我的高級誰是專家在Matlab確認並告訴我,當你運行.m scri從另一個.m腳本獲得pt,必須先清除工作空間,然後再運行另一個.m腳本,這是我不想執行的過程,因爲每個腳本都依賴於前一個腳本的變量,以避免這種情況並實現我的目標(從我的高級建議)我用save()保存工作空間,然後清除它運行下一個腳本,然後再次加載它load() ....有點迂迴的做法,但只要它的工作方式

+0

嗨,歡迎來到SO!請閱讀[this](http://stackoverflow.com/help/how-to-ask)文章,瞭解如何提出更好的問題,這將幫助人們給你更好的答案。添加有關您的問題的信息時,請編輯您的原始問題。 另外,當從另一個腳本調用腳本時,您不需要運行清除... –

+0

@steve感謝您的鏈接,它對將來的問題非常有用 –

1

我認爲儘可能避免clear更容易。它只能用在主腳本的頂部。解決方案是使用function workspace(通過創建function)而不是全局工作空間。這樣我們就避免了混亂的全局工作空間。

的main.m:

clear all 

Original_AddRun1 = 'F:\UPT\Root\Run\S1.m'; 
Original_AddRun2 = 'F:\UPT\Root\Run2\S2.m'; 
Original_AddRun3 = 'F:\UPT\Root\Run3\S3.m'; 
Original_AddRun4 = 'F:\UPT\Root\Run4\Subfolder\S4.m'; 

run(Original_AddRun1); 
run(Original_AddRun2); 
run(Original_AddRun3); 
run(Original_AddRun4); 

F:\ UPT \ ROOT \運行\ S1.m:

function S1() 
    ... % global variables (ex. Original_AddRun1) are not defined here 
    ... % newly defined variables are not added to global scope 
end 
+0

它不起作用,因爲每個腳本都需要使用變量由以前運行的腳本和'Function'生成的一般工作空間不允許像我之前說的那樣,我將很快更新這個問題 –

+0

在我看來,乾淨的解決方案是使用函數參數來傳遞所需的變量。 – m7913d