Powershell用空格打开文件路径

webghufk  于 2023-04-06  发布在  Shell
关注(0)|答案(6)|浏览(193)

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

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

destruct.ps1与此脚本位于同一文件夹中。
但是,当在包含空格("C:\My Scripts\")的位置运行此脚本时,我会得到以下错误:
术语“C:\My”未被识别为cmdlet、函数、可操作程序或脚本文件。请验证该术语,然后重试。
我知道通过使用'&'和Invoke-Expression方法可以解决这个问题,但是我如何使用start-process方法来解决这个问题呢?

wfveoks0

wfveoks01#

试试这个:

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

评论后编辑:

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

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

zf2sa74q

zf2sa74q2#

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

"`"$filepath`""
aemubtdh

aemubtdh3#

我在这里回答一个一般的情况。
如果您需要从Powerhsell导航到一个文件夹,例如C:\Program Files,则以下命令将不起作用,因为它在路径之间有白色。
cd C:\Program Files
而是像下面这样用双引号嵌入路径。
cd "C:\Program Files"

igetnqfo

igetnqfo4#

文件名可能包含空格,因此在完整路径中保留空格:
记事本++执行命令:
“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"”

vm0i2vca

vm0i2vca5#

为了防止[string]$shipno(即路径和文件名)包含空格,下面的代码允许它成功地传递给-FilePath:

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

9ceoxa926#

如果您在使用**PowerShell 7(pwsh)**寻找解决方案时遇到此问题:
1.将参数列表作为包含所有参数的单个字符串写入
1.用双引号将脚本名称括起来
1.用单引号和parantheses括起参数字符串
基本示例:

Start-Process pwsh -ArgumentList ('"path/to/my script with spaces.ps1"')

带有附加交换机的示例:

Start-Process pwsh -ArgumentList ('-NoExit "path/to/my script with spaces.ps1"')

以管理员身份运行脚本的示例:

Start-Process -Verb runAs pwsh -ArgumentList ('-NoExit "path/to/my script with spaces.ps1"')

这是针对问题https://github.com/PowerShell/PowerShell/issues/5576的解决方案,该问题已超过5年未解决。

相关问题