我有以下命令失败:
Execute(h, 'cd C:\Test\My Folder\')
但是,如果我删除空格(在重命名文件夹之后),它可以工作:
Execute(h, 'cd C:\Test\My_Folder\')
我的一些文件夹路径很长,很难重命名它们以删除空格。有没有办法不必重命名实际的文件夹路径?
答案 0 :(得分: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\')
所以你不需要处理单/双'
,帮助函数会为你做这个(如果你的文件夹,这可能是一种在循环中使用它的方法)例如,路径在单元格数组中。