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

通过快捷方式执行PowerShell脚本时获取正确启动目录

获取PowerShell快捷方式所在目录(PowerShell 5.x)

核心解决方案

以下脚本可自动定位启动当前PowerShell脚本的快捷方式(.lnk)所在目录,无需预先指定快捷路径:

# 获取当前PowerShell进程
$currentProcess = Get-Process -Id $PID

# 获取父进程(通常是explorer.exe,即双击快捷方式的启动进程)
$parentProcessInfo = Get-CimInstance Win32_Process -Filter "ProcessId = $($currentProcess.Id)"
$parentProcess = Get-Process -Id $parentProcessInfo.ParentProcessId

# 从父进程命令行中提取快捷方式(.lnk)路径
$lnkPathMatch = $parentProcess.CommandLine | Select-String -Pattern '"([^"]+\.lnk)"' -ErrorAction SilentlyContinue

if ($lnkPathMatch) {
    $lnkFullPath = $lnkPathMatch.Matches.Groups[1].Value
    # 获取快捷方式所在目录
    $shortcutDir = Split-Path -Path $lnkFullPath -Parent
    # 拼接目标Games目录
    $gamesDirPath = Join-Path -Path $shortcutDir -ChildPath "Games"
    
    # 验证输出(可按需删除)
    Write-Host "快捷方式所在目录: $shortcutDir"
    Write-Host "Games目录路径: $gamesDirPath"
} else {
    Write-Warning "未找到启动当前脚本的快捷方式文件,请确保通过.lnk快捷方式执行脚本。"
}

关键说明

  • 原理:双击快捷方式时,由explorer.exe进程启动该快捷方式,其命令行参数中会包含完整的.lnk文件路径。通过解析父进程(explorer.exe)的命令行,即可提取快捷方式的位置。
  • 兼容性:适用于PowerShell 5.x,无需额外安装模块,仅依赖系统自带的CIM和进程查询功能。
  • 边界处理:如果脚本不是通过快捷方式启动(如直接在PowerShell中运行),会输出警告提示。

补充优化

如果需要处理父进程不是explorer.exe的场景(例如从其他脚本或工具启动快捷方式),可以扩展逻辑遍历所有进程查找关联的.lnk文件,但常规双击场景下上述代码已足够使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:27:08