2015-09-04 82 views
0

我有以下命令,該命令將失敗:執行命令錯誤,如果它包含空格

Execute(h, 'cd C:\Test\My Folder\') 

但是如果我刪除空格(不必重命名文件夾後),它的工作原理:

Execute(h, 'cd C:\Test\My_Folder\') 

一些我的文件夾路徑很長,很難重命名它們以刪除空格。有沒有辦法重新命名實際的文件夾路徑?

+1

你必須使用字符串標識符'''(這是一個雙單''')的轉​​義字符。所以在你的情況下:'執行(h,'cd''C:\ Test \ My_Folder \''')' – Hoki

+0

謝謝Hoki,那是完美的。我使用了「之前沒有工作,但你使用的答案」,謝謝! – Mary

+1

如何使用['cd'](https://www.mathworks.com/help/matlab/ref/cd.html) Matlab的命令? –

回答

1

的問題是,你必須定義將被評估的字符串內的「包含字符串空間」。

實施例:

在您的例子,將要執行所得到的命令是您的第一字符串的內容,所以

Execute(h, 'cd C:\Test\My Folder\') 

將相當於在Matlab命令窗口鍵入:

>> cd C:\TEMP\My Folder\ 
Error using cd 
Too many input arguments. 

這的確會產生一個錯誤,因爲在命令行中通過不帶括號的參數的默認行爲是逗號後的一切分裂查找每個空格字符,並將參數作爲字符串發送到命令。因此在這種情況下,cd命令正在接收2個參數:arg1= 'C:\TEMP\My'arg2= 'Folder\'cd命令不能處理2個輸入參數,所以它會出錯。

2.正確語法是:

cd 'C:\TEMP\My Folder\'          %'// ignore that comment 
%// OR 
cd('C:\TEMP\My Folder\') 

甚至與參數作爲變量:

folderPath = 'C:\TEMP\My Folder\' ;       %'// ignore that comment 
cd(folderPath) 

現在你的問題是嵌入該命令(兩者形成你選擇)轉換成一個字符串。所以你會在string內有string。在Matlab中,字符串標識符的轉義字符只是雙重'。因此,考慮到這,你如果你可以使用任何上面給出的3種形式:

execute(h , 'cd ''C:\TEMP\My Folder\''') 
%// OR 
execute(h , 'cd(''C:\TEMP\My Folder\'')') 

甚至與參數:

execute(h , 'folderPath = ''C:\TEMP\My Folder\'' ; cd(folderPath)') 

儘管最後形式似乎有點沉重。


最後,如果你要使用很多很多次,你可以使用內嵌輔助功能:

excmd = @(cmd,arg) execute(h,[cmd '(''' arg ''')']) 

然後爲每個文件夾,使用以下形式:

excmd('cd' , 'C:\TEMP\My Folder\') 

所以你不需要採取單/雙'的護理,輔助功能爲你做的(以及這可能是使用在一個循環的方式,如果你的文件夾路徑是在一個單元陣列例如)。