我在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()
}
答案 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()
}