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

PowerShell中$_在路径参数中解析为文件名的原因

PowerShell中FileInfo对象的解析逻辑

你的问题核心是PowerShell对FileInfo对象在不同场景下的自动处理机制,拆解来看:

1. -value $_为何能识别完整源路径

New-Item的-Value参数(创建硬链接时)支持直接接收FileInfo类型的对象——因为这个参数的设计就是为了接受文件系统实体对象或字符串路径。当你传入$_(即gci输出的FileInfo对象)时,PowerShell会直接读取对象的FullName属性(完整路径)来定位源文件,不需要额外转换。

2. -path c:\destdir\$_为何只取文件名

这里属于字符串上下文拼接操作:当你把一个对象嵌入到字符串里(比如和c:\destdir\拼接),PowerShell会自动调用该对象的ToString()方法来获取字符串表示。而FileInfo对象的ToString()方法默认返回的就是它的Name属性(仅文件名,不含路径),所以拼接后就生成了目标路径c:\destdir\1.txt。

你可以用以下命令验证这个行为:

# 查看FileInfo对象ToString()的输出
gci | ForEach-Object { $_.ToString() }
# 查看对象的完整路径属性
gci | ForEach-Object { $_.FullName }

如果需要在字符串拼接里用完整路径,只需明确调用$_.FullName即可,比如:

gci | ForEach-Object { New-Item -ItemType HardLink -Path "c:\destdir\$($_.FullName)" -Value $_ }

不过你的场景里只需要文件名,所以自动转换刚好满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:40:29