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

PowerShell脚本动态路径适配求助:USB盘符变更致脚本失效

解决PowerShell脚本路径动态获取的问题

方法1:利用$PSScriptRoot(最推荐)

$PSScriptRoot是PowerShell内置变量,会返回当前正在运行的脚本所在的目录路径。只要脚本之间的相对目录结构不变,不管你把整个文件夹移到哪个盘符、哪个位置,都能用它构建关联脚本的路径。

比如你的主脚本放在Windows installatie\Scripts目录下,要调用同级Menus子目录里的Apps.ps1,直接写:

& "$PSScriptRoot\Menus\Apps.ps1"

如果关联脚本在上级目录,比如主脚本在Menus里,要调用Scripts目录下的其他脚本,就用:

& "$PSScriptRoot\..\OtherScript.ps1"

方法2:搜索特定盘符找目标脚本

如果不确定脚本所在的盘符(比如USB盘符经常变更),可以用Get-ChildItem搜索指定盘符下的目标脚本:

# 定义要搜索的盘符范围,比如常见的USB盘符D、E、F
$targetScript = Get-ChildItem -Path 'D:','E:','F:' -Filter 'Apps.ps1' -Recurse -File | 
    Where-Object { $_.FullName -match 'Windows installatie\\Scripts\\Menus' }

if ($targetScript) {
    & $targetScript.FullName
} else {
    Write-Error "找不到目标脚本"
}

这个方法会在指定盘符里递归查找符合路径规则的Apps.ps1,找到后直接调用。

方法3:先定位根目录再构建路径

如果知道脚本所在的根文件夹是Windows installatie,可以先定位这个根目录,再拼接完整路径:

# 从当前脚本目录向上回溯找到根目录(根据实际目录层级调整Parent的次数)
$rootFolder = (Get-Item $PSScriptRoot).Parent.Parent.FullName
& "$rootFolder\Scripts\Menus\Apps.ps1"

比如主脚本在Windows installatie\Scripts\Menus里,(Get-Item $PSScriptRoot).Parent.Parent就会返回Windows installatie的路径。

为什么直接用通配符调用无效?

&运算符需要接收明确的单个路径,直接写& '*\Windows installatie\Scripts\Menus\Apps.ps1'时,PowerShell不会自动展开通配符。如果想用通配符,得先通过Resolve-Path或Get-ChildItem把通配符转换成实际路径:

# 注意:如果找到多个匹配会报错,适合确定只有一个目标脚本的情况
& (Resolve-Path '*\Windows installatie\Scripts\Menus\Apps.ps1').Path

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:05:31