当path包含特殊字符时,包含脚本不起作用



我试图包括一个脚本内的另一个是在同一文件夹,使用点语法:

. '.BaseScript.ps1'

脚本的路径包含一个名称中带有方括号的文件夹。即使我使用的是相对路径,路径错误仍然发生。

把它移到其他没有特殊字符的路径下就可以了

如何在使用相对路径时满足这种情况?

不幸的是,PowerShell将操作数处理为.点源和&调用操作符(其中包括隐式调用[1])作为通配符表达式,这会导致包含[的路径出现问题。,是一个通配符元字符

解决方法是[转义为`[;例如,点源路径为./test[1]/script.ps1的脚本:

# Note: '/' and '' can be used interchangeably in PowerShell.
. ./test`[1]/script.ps1

重要:如果路径是相对的,它必须以./.开头(参见下面的完整路径)。

注意:[是一个通配符元字符,因为你可以用它来表示字符范围([a-z])或集合([56]);虽然显然也需要],但省略[就足够了。

这个不幸的要求,也会影响其他上下文,是GitHub问题#4726的主题。


或者——而且奇怪的是——正如Theo的有用答案所示,如果您使用完整路径,则不需要此转义.

# Dot-source 'script.ps1` from the same location as the running
# script ($PSScriptRoot).
# (Use $PWD to refer to the *currrent* dir.)
# Because this results in a *full* path, there is no need to escape, strangely.
. $PSScriptRoot/script.ps1

[1]&,它可以调用任何命令,并在子作用域内运行用PowerShell代码编写的命令,并不严格需要调用;例如,& ./path/to/script.ps1./path/to/script.ps1是等价的;但是,如果路径是加引号的和/或包含变量引用,则需要&

解决这个问题的方法似乎是使用第二个脚本的完整路径:

. (Join-Path -Path $PSScriptRoot -ChildPath 'SecondScript.ps1')

@Theo有一个有用的解决方案,但原因是[]必须在路径中转义。

$path = 'C:path`[to`]script.ps1'

相关内容

  • 没有找到相关文章

最新更新