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

如何在PowerShell中创建相对于工作目录的符号链接(不切换目录)

在PowerShell中创建相对于工作目录的符号链接(无需切换目录)

你需要实现的是创建基于当前工作目录计算相对路径的符号链接,类似GNU/Linux中ln -s -r的效果——生成的链接目标是相对于链接自身所在目录的相对路径,而非直接使用工作目录下的相对路径。

Linux下的参考实现

Linux中通过以下命令即可达成需求:

ln -s -r ./change/99.md ./abuse/change/99.md

最终生成的目录结构与链接指向:

.
├── abuse
│   └── change
│       └── 99.md -> ../../change/99.md
└── change
    └── 99.md

PowerShell默认命令的问题

直接使用New-Item的话,-Target参数的相对路径会被解析为相对于链接所在目录的路径,而非当前工作目录,因此执行以下命令无法得到预期结果:

New-Item -ItemType SymbolicLink -Path ".\abuse\change\99.md" -Target ".\change\99.md"

解决方案

要实现类似ln -r的效果,需要先计算原文件相对于链接所在目录的相对路径,再传入New-Item:

方法1:使用PowerShell内置命令计算相对路径

# 定义原文件和链接的路径
$source = ".\change\99.md"
$linkPath = ".\abuse\change\99.md"

# 获取链接所在的父目录
$linkDir = Split-Path -Path $linkPath -Parent

# 计算原文件相对于链接目录的相对路径
$relativeTarget = (Resolve-Path -Relative -Path $source -RelativeBasePath $linkDir).TrimStart('.\')

# 创建符号链接
New-Item -ItemType SymbolicLink -Path $linkPath -Target $relativeTarget

方法2:使用.NET类计算相对路径

# 获取原文件和链接目录的绝对路径
$sourceFullPath = (Get-Item ".\change\99.md").FullName
$linkDirFullPath = (Get-Item ".\abuse\change").FullName

# 计算相对路径
$relativeTarget = [System.IO.Path]::GetRelativePath($linkDirFullPath, $sourceFullPath)

# 创建符号链接
New-Item -ItemType SymbolicLink -Path ".\abuse\change\99.md" -Target $relativeTarget

执行上述任一方法后,生成的abuse/change/99.md符号链接目标会是../../change/99.md,与Linux下的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:00:03