如何在Matlab的system()命令中保留双引号
在Matlab中通过system向PowerShell传递带空格参数的解决办法
当Matlab调用system()执行PowerShell命令时,由于Windows默认通过cmd.exe中转,双引号会被cmd解析并移除,导致PowerShell无法收到带空格的完整参数。以下是几种可行的解决方式:
方法1:用反斜杠转义双引号
在Matlab中,用\"代替直接的双引号,cmd会将\"解析为实际的双引号传递给PowerShell:
system('powershell.exe echo \"a c\"', '-echo')
执行后PowerShell收到的命令是echo "a c",会输出单行的a c。
方法2:用单引号包裹PowerShell命令
使用PowerShell的-Command参数,将整个要执行的命令用单引号包裹,Matlab中需要用两个单引号表示一个单引号:
system('powershell.exe -Command ''echo "a c"''', '-echo')
Matlab会把两个连续的单引号转换为一个,最终传递给PowerShell的是-Command 'echo "a c"',确保带空格的参数被正确识别。
方法3:通过PowerShell变量传递参数(适合实际文件名场景)
如果是处理实际的文件名,将文件名赋值给PowerShell变量可以避免复杂的引号转义:
filename = '我的 文件.txt'; system(['powershell.exe -Command ''$targetFile = "' filename '" ; Write-Output $targetFile'''], '-echo')
这种方式更直观,也减少了转义出错的概率。
补充说明
Windows下Matlab的system()默认依赖cmd.exe执行命令,而cmd会将双引号作为命令行参数的分隔符处理,导致直接写入的双引号被过滤。上述方法都是通过转义或改变参数传递方式,让双引号能正确传递到PowerShell中,确保带空格的参数被当作一个整体处理。
内容的提问来源于stack exchange,提问作者Argyll
相关产品推荐
相关产品推荐

