首页 > 解决方案 > 获取快捷方式的目标文件并将该文件放在新目录中

问题描述

我正在尝试从具有许多 .lnk 快捷方式的文件夹中获取目标文件,并使用 Powershell 将它们放入新文件夹中。我有以下脚本并且它运行但输出文件夹不显示任何内容:

$WScript = New-Object -ComObject WScript.Shell Get-ChildItem -Path "<shortcut folder>*.lnk" | ForEach-Object {$WScript.CreateShortcut($_.FullName).TargetPath} | Out-File -FilePath "<Destination Folder>"

标签: windowspowershelldirectory

解决方案


分支我对你的评论。你不能输出一个字符串,这是目标路径中的内容。这不是一个真实的文件。如果这是您需要的,您可以将该字符串输出到文本文件中,但这听起来不像您所追求的。

只需逐步浏览每个部分,以确保您得到您所期望的并在复制语句中使用该目标。

# Validate the lnk data
$WScript = New-Object -ComObject WScript.Shell
Get-ChildItem -Path "$env:USERPROFILE\Desktop\ClearIEData.lnk" | Format-Table -AutoSize
<#
# Results

    Directory: C:\Users\postanote\Desktop


Mode          LastWriteTime Length Name           
----          ------------- ------ ----           
-a----  28-Oct-18     00:52   1293 ClearIEData.lnk
#>

# Extract the lnk target path
$WScript = New-Object -ComObject WScript.Shell
Get-ChildItem -Path "$env:USERPROFILE\Desktop\ClearIEData.lnk" | 
ForEach-Object {$WScript.CreateShortcut($_.FullName).TargetPath}
<#
# Results

D:\Tools\ClearIEData.cmd
#>

# Take needed action on the lnk target path info
$WScript = New-Object -ComObject WScript.Shell
Get-ChildItem -Path "$env:USERPROFILE\Desktop\ClearIEData.lnk" | 
ForEach-Object {
    Copy-Item -Path $($WScript.CreateShortcut($_.FullName).TargetPath) -Destination 'D:\temp' -WhatIf
}
<#
# Results

What if: Performing the operation "Copy File" on target "Item: D:\Tools\ClearIEData.cmd Destination: D:\temp\ClearIEData.cmd".
#>

如果对结果满意,请注释掉或删除 -WhatIf 并再次运行代码以执行操作。

Get-ChildItem -Path 'D:\temp' -Filter 'ClearIEData.cmd'
<#
# Results

    Directory: D:\temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        05-Mar-20     15:10           2571 ClearIEData.cmd
#>

$WScript = New-Object -ComObject WScript.Shell
Get-ChildItem -Path "$env:USERPROFILE\Desktop\ClearIEData.lnk" | 
ForEach-Object {
    $WScript.CreateShortcut($_.FullName).TargetPath | Out-File -FilePath 'D:\Temp\LinkFileData.txt' -Append -WhatIf
}
Get-Content -Path 'D:\Temp\LinkFileData.txt'

<#
# Results

D:\Tools\ClearIEData.cmd
#>

推荐阅读