2014-04-03 108 views
5

林我PS剧本我希望能够在另一个PS情况下做运行另一个脚本如下:Powershell的打开文件路径

$filepath = Resolve-Path "destruct.ps1" 

start-process powershell.exe "$filepath" 

destruct.ps1是在同一文件夹这个脚本

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

术语“C:\我的”没有被识别为cmdlet ,功能,可操作程序或脚本文件。验证该字词并重试。

我知道通过使用Invoke-Expression方法'&'解决了这个问题,我怎样才能做到这一点,但通过使用启动过程的方法?

非常感谢哟帮助!

回答

7

试试这个:

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

编辑点评后:

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

侧面说明:

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

+0

嗨,我很抱歉,不工作:/它不喜欢-FilePath或-ArgumentList参数:'找不到与名称'FilePath'匹配的参数..与'ArgumentList'相同。我使用'Resolve-Path'来设置$ filepath..would这会有所作为吗?非常感谢大家的帮助 – user3402227

+0

@ user3402227发布你正在使用的正确的代码...这种方式必须工作! ;) –

+0

我已经用相关代码更新了我的帖子!非常感谢 – user3402227

8

,让你通过一个加引号的参数,您可以添加转义双引号:

"`"$filepath`"" 
+0

另一种选择是对使用单引号“外,”这样是双引号将作为文字处理。 –

+2

然后你得到双引号,但$ filepath不扩展。如果将其放在双引号内的单引号中,它将展开,但命令行不像单引号。 – mjolinor

+0

嘿,非常感谢您的帮助。不幸的是,这仍然没有办法呢?让$ filepath不能使用空格,使用空格不会...... – user3402227

2

我在这里回答一般情况。

如果您需要导航从Powerhsell例如C:\Program Files一个文件夹,下面的命令将无法正常工作,因为它有空格的路径之间。

cd C:\Program Files

而是嵌入用双引号像下面的路径。

cd "C:\Program Files"

0

文件名可能包含空格,所以在保存完整的路径空间:
记事本++ exec命令:
“C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \ powershell.exe”“& \ “$(FULL_CURRENT_PATH)\””

从命令提示符相同:
“C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \ powershell.exe” “& \” C:\ a_work \系统\用户名with spaces.ps1 \“”

0

以防万一[字符串] $ shipno(这是路径&文件名)来在包括空格以下允许它传递给成功-FilePath:

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