11

我是我的 PS 脚本,我希望能够通过执行以下操作在另一个 PS 实例中运行另一个脚本:

$filepath = Resolve-Path "destruct.ps1"
    
start-process powershell.exe "$filepath"

destruct.ps1与此脚本位于同一文件夹中。

但是,在包含空格 () 的位置运行此脚本时,"C:\My Scripts\"我将收到以下错误:

术语“C:\My”未被识别为 cmdlet、函数、可运行程序或脚本文件。验证术语并重试。

我知道通过使用'&'带有 Invoke-Expression 方法的方法解决了这个问题,但是使用 start-process 方法我怎么能做到这一点?

4

5 回答 5

17

尝试这个:

 start-process -FilePath powershell.exe -ArgumentList "-file `"$filepath`""

评论后编辑:

start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`""

边注:

$filepath[pathinfo]类型而不是[string]类型。

于 2014-04-03T15:02:23.847 回答
13

您可以添加转义的双引号,以便传递带引号的参数:

 "`"$filepath`""
于 2014-04-03T14:37:32.443 回答
2

我在这里回答一般情况。

例如,如果您需要C:\Program Files从 Powerhsell 导航到文件夹,则以下命令将不起作用,因为它在路径之间有空格。

cd C:\Program Files

而是使用双引号嵌入路径,如下所示。

cd "C:\Program Files"

于 2016-02-03T11:04:39.760 回答
0

文件名可能包含空格,因此请在完整路径中保留空格:
Notepad++ exec command:
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" "& \"$(FULL_CURRENT_PATH)\""

与命令提示符相同:
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" "& \"C:\a_work\Systems\name with spaces.ps1\""

于 2016-09-28T22:58:38.803 回答
0

以防万一 [string]$shipno (这是路径和文件名)包含空格,以下允许它成功传递给 -FilePath :

if ($shipno.contains(" ") -eq $true) {
   $shipno = """" + $shipno + """"
}
于 2017-04-09T14:05:55.280 回答