Powershell打开文件路径与空间

时间:2014-04-03 14:33:32

标签: powershell start-process

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

$filepath = Resolve-Path "destruct.ps1"

start-process powershell.exe "$filepath"

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

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

术语“C:\ My”未被识别为cmdlet,函数,可操作程序或脚本文件。验证该术语,然后重试。

我知道使用'&'使用Invoke-Expression方法解决了这个问题,我怎么能这样做,但是使用了启动过程方法?

非常感谢您的帮助!

5 个答案:

答案 0 :(得分:10)

试试这个:

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

评论后编辑:

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

旁注:

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

答案 1 :(得分:9)

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

 "`"$filepath`""

答案 2 :(得分:1)

我在这里回答一般情况。

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

cd C:\Program Files

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

cd "C:\Program Files"

答案 3 :(得分:0)

文件名可能包含空格,因此请保留完整路径中的空格:
Notepad ++ exec命令:
" 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 \""

答案 4 :(得分:0)

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

if ($shipno.contains(" ") -eq $true) {
   $shipno = """" + $shipno + """"
}