如何使用 Powershell 在目标目录中创建指向源目录中每个文件的硬链接?

如何使用 Powershell 在目标目录中创建指向源目录中每个文件的硬链接?

我尝试使用带有 -ItemType Hardlink 的 New-Item cmdlet,但未能成功获取正确的参数(无论是 -Name、-Path、-Value 还是 -Target)。我尝试使用 gci 将源文件传输到 New-Item,但也没有成功。我知道我可以使用 mklink 或其他实用程序,但我想知道如何在 Powershell 中完成此操作。

答案1

那么,您是否会说出这样的简单命令:

New-Item -ItemType HardLink -Path 'C:\path\to\hardlink' -Value 'C:\path\to\original\file'

当然,您也可以使用 .Net 命名空间来执行此操作:

‘powershell [System.IO.文件]’

‘powershell [System.IO.File] 硬链接’

[System.IO.File]::CreateHardLink('C:\path\to\hardlink.txt', 'C:\path\to\original.txt')

根据 MS 的记录,您几乎可以在 PS 控制台/ISE/VSCode 中运行任何 *.exe,只要您传递了执行所需的全部内容

PowerShell - 运行可执行文件 - TechNet 文章 - 美国(英语) - TechNet Wiki

例如,在上面提到的任何工具中,您仍然可以执行此操作,即使在脚本中也可以:

fsutil hardlink create "C:\path\to\hardlink" "C:\path\to\original\file"

...或者mlink正如您所提到的。

有关使用该 cmdlet 的用例的问题已在 SU 和其他论坛上定期讨论。

'新项目-ItemType HardLink'

答案2

以下命令从 c:\sourcedir 执行,在 c:\destdir 中创建到 c:\sourcedir 中每个文件的硬链接:

gci | foreach-object {new-item -itemtype hardlink -path c:\destdir\$_ -value $_}

答案3

我要提出一个替代方案。在许多情况下,创建快捷方式就可以满足您的需求。在 powershell 中执行此操作的代码在网上。
您可以在此处看到一个示例:https://shellgeek.com/create-shortcuts-on-user-desktop-using-powershell/

以下是他们的示例代码(更改用户名):

$SourceFilePath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" $ShortcutPath = "C:\Users\Gary.Thomas\Desktop\MsEdge.lnk" $WScriptObj = New-Object -ComObject ("WScript.Shell") $shortcut = $WscriptObj.CreateShortcut($ShortcutPath) $shortcut.TargetPath = $SourceFilePath $shortcut.Save()

答案4

$todir=echo C:/code/AppDir/data; ls myfile.txt | %{ New-Item -ItemType HardLink -Path (join-path $todir $_.Name) -Value $_ -Verbose }

就像@Jim的回答一样,从 c:\sourcedir 执行

相同的: $todir='/code/AppDir/data'; ls myfile.txt | %{ New-Item -ItemType HardLink -Path (join-path $todir $_.Name) -Value $_ -Verbose }

相关内容