You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用相对路径点源(Dot sourcing)位于$PSScriptRoot上级目录的脚本文件?

解决PowerShell中点源上级目录脚本的路径问题

你的问题出在路径的逻辑错误上:$PSScriptRoot本身就是当前脚本所在的绝对目录路径,你在它前面加..\会导致路径变成类似..\C:\Your\Script\Path\Functions\...这种无效格式——系统会把..\当成相对于当前工作目录的上级,再拼接绝对路径,这显然不符合你的预期。

下面是几种可靠的正确写法:

方法1:用Split-Path获取上级目录(推荐)

先通过Split-Path拿到当前脚本目录的上级目录,再用Join-Path安全拼接目标路径:

# 获取当前脚本目录的上级目录
$parentDirectory = Split-Path -Path $PSScriptRoot -Parent
# 点源目标日志函数脚本
. (Join-Path -Path $parentDirectory -ChildPath "Functions\Logging_Functions.ps1")

这种方式完全基于脚本自身的位置,不受当前工作目录变化的影响,是最稳妥的写法。

方法2:用.NET Path类拼接路径

借助.NET的Path.Combine方法自动处理路径分隔符,再用Resolve-Path转换成绝对路径:

# 拼接相对上级的路径
$targetScriptPath = [System.IO.Path]::Combine($PSScriptRoot, "..", "Functions", "Logging_Functions.ps1")
# 解析为绝对路径(避免残留相对标识)
$resolvedPath = Resolve-Path -Path $targetScriptPath -ErrorAction Stop
# 点源脚本
. $resolvedPath

Resolve-Path会帮你把..转换成实际的上级目录路径,确保路径绝对有效。

不推荐的写法(依赖工作目录)

如果你确定脚本运行时的当前工作目录就是脚本所在目录,也可以直接用相对路径:

. "..\Functions\Logging_Functions.ps1"

但这种写法风险很高——如果脚本被从其他目录调用(比如通过绝对路径执行),当前工作目录就不是脚本目录,相对路径会直接失效,所以不建议在生产脚本中使用。

总结一下:永远基于$PSScriptRoot构建绝对路径,不要把相对路径前缀和绝对路径变量混写,这样才能保证路径在任何场景下都有效。

内容的提问来源于stack exchange,提问作者Skeer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 12:47:36