为什么不创建快捷方式?

时间:2019-04-03 15:21:00

标签: powershell

我在Powershell中遇到问题(Windows 10 1809) 我希望该脚本在递归模式下查找目录D:\ Test中的所有.exe文件,并在D:\中创建快捷方式。但是我的代码只是在D:\中创建link.lnk。为什么?

$1 = get-childitem "D:\Test" -recurse | where {$_.extension -eq ".exe"} | % {
Write-Host $_.FullName
}
ForEach ($item in $1)  {
$Shell = New-Object -ComObject ("WScript.Shell")
$ShortCut = $Shell.CreateShortcut("D:\link.lnk")
$ShortCut.TargetPath= $1
$Shortcut.Save()
}

1 个答案:

答案 0 :(得分:1)

您似乎在命名所有快捷键D:\link.lnk,循环将一遍又一遍地覆盖相同的名称。使用BaseName属性(名称减去扩展名)指定唯一的快捷方式链接文件名应该可以解决您的问题。另外,您还需要使用循环$item来指定TargetPath

此外,通过遍历Write-Host,您实际上并没有为变量$1分配任何内容。通过删除% { Write-Host $_.FullName } $1确实可以获得正确的输出。因此正确的代码应该是:

$1 = get-childitem "D:\Test" -recurse | where {$_.extension -eq ".exe"}

ForEach ($item in $1)  {
    Write-Host "Creating Shortcut: D:\$($item.BaseName).lnk  Pointing to: $($item.FullName)"
    $Shell = New-Object -ComObject ("WScript.Shell")
    $ShortCut = $Shell.CreateShortcut("D:\$($item.BaseName).lnk")
    $ShortCut.TargetPath= $item.FullName
    $Shortcut.Save()
}
相关问题