如何使用PowerShell在目标目录中为源目录内的每个文件创建硬链接?
如何使用PowerShell在目标目录中为源目录内的每个文件创建硬链接?
我太懂你纠结的点了,New-Item的参数对应关系确实容易搞混,尤其是硬链接模式下的参数,我来给你理清楚正确的用法,不管是单个文件还是批量处理都能搞定。
首先得把参数的对应逻辑搞明白,这是你之前踩坑的核心:
-Path:指定硬链接要存放的目标目录-Name:硬链接的文件名(如果想和源文件同名,直接复用源文件的名称就行)-ItemType HardLink:明确告诉PowerShell我们要创建的是硬链接类型-Value:源文件的完整路径(这是很多人搞混的点,千万别和-Path搞反了)
单个文件创建硬链接的示例
如果只是给单个文件创建硬链接,直接这么写就可以:
New-Item -Path "D:\MyTargetFolder" -Name "weekly-report.pdf" -ItemType HardLink -Value "C:\MySourceFolder\weekly-report.pdf"
批量给源目录所有文件创建硬链接
如果你要遍历源目录里的所有文件,批量生成硬链接到目标目录,用Get-ChildItem配合ForEach-Object是最稳妥的方式(直接管道容易因为参数绑定逻辑问题失效,这就是你之前用gci管道没成功的原因):
# 先定义源目录和目标目录的路径 $sourceDirectory = "C:\MySourceFiles" $targetDirectory = "D:\MyHardLinkFolder" # 遍历源目录下的所有文件(排除子目录),逐个创建硬链接 Get-ChildItem -Path $sourceDirectory -File | ForEach-Object { New-Item -Path $targetDirectory -Name $_.Name -ItemType HardLink -Value $_.FullName }
额外需要注意的点
- 硬链接只能在同一个NTFS卷上创建,跨磁盘是不支持的
- PowerShell的
New-Item不支持给目录创建硬链接(如果要做目录链接得用mklink /J,但你要的是文件硬链接,所以不用管这个) - 如果目标目录已经有同名文件,
New-Item会直接报错;要是想覆盖,要么先删除目标文件,要么加上-Force参数(不过-Force更适合更新已存在的硬链接指向,普通文件还是先删除更稳妥)
备注:内容来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

