批处理调用PowerShell时含空格的文件路径无法正常工作怎么办
解决Bat调用PowerShell读取含空格路径脚本的问题
下面是几个简单有效的解决方法,针对路径含空格时Bat无法调用PowerShell执行脚本的问题:
方法1:用单引号包裹PowerShell中的路径(变量版)
直接在PowerShell命令里用单引号把变量路径包起来,Bat会自动替换变量,PowerShell能正确识别带空格的路径:
@echo off set "file=C:\example with space\test.txt" powershell "cat -raw '%file%' | invoke-expression"
方法2:用单引号包裹PowerShell中的路径(直接路径版)
如果不用变量,直接把带空格的路径用单引号包起来传给PowerShell:
@echo off powershell "cat -raw 'C:\example with space\test.txt' | invoke-expression"
方法3:用Bat转义符处理双引号
Bat里用^作为双引号的转义符,给路径加上转义后的双引号,PowerShell也能正确解析:
@echo off set "file=C:\example with space\test.txt" powershell -Command "cat -raw ^"%file%^" | invoke-expression"
为什么之前的尝试失败?
- 示例3:变量替换后路径带空格,PowerShell会把空格后的内容当成新参数,导致路径被拆分
- 示例4:Bat会把中间的双引号当成PowerShell命令的结束标记,导致命令被截断
- 示例5:多层双引号会被Bat错误解析,传给PowerShell的命令格式混乱
- 示例6:Bat里的转义符是
^而不是\,用\无法正确转义引号,导致PowerShell识别错误
内容的提问来源于stack exchange,提问作者TommyMaes
相关产品推荐
相关产品推荐

