我尝试使用带有 -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 命名空间来执行此操作:
[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 和其他论坛上定期讨论。
答案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 }