在 PowerShell 中,若执行脚本所在路径包含通配符时,会导致 Start-Process 出错

发布时间 2023-07-20 09:57:55作者: 不是豆豆

比如在这样的路径:D:\[测试1]脚本测试\test

如果执行 Start-Process ..\setchar.exe 会报错:

Start-Process : 无法执行操作,因为通配符路径 D:\[测试1]脚本测试\test 无法解析为文件。
所在位置 行:1 字符: 1
......

下面虽然还有一堆错,但是重点其实是在第一行

在 PS 中是有这些通配符:https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_wildcards

实际能写在路径中的,主要就是 [、] 这两个字符

再根据 Start-Process 文档:https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.management/start-process

执行该方法时实际还有一个默认参数:

-WorkingDirectory
指定新进程的起始位置。
如果未指定,则 cmdlet 默认为 FilePath 参数中指定的完全限定位置。 如果 FilePath 参数的值不是完全限定的,则它默认为调用进程的当前工作目录。
不支持通配符。 路径不得包含将解释为通配符的字符。

在未指定时,默认使用当前目录,但不知道它是怎么获取的当前目录,导致路径中的 [ ] 被认为是通配符

解决方法也很简单,显式指定一下工作目录即可:

Start-Process -FilePath "..\setchar.exe" -WorkingDirectory "..\"

唔,很是神奇。