Получить целевой файл ярлыка и поместить этот файл в новый каталог - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь получить целевые файлы из папки с множеством ярлыков .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>"

1 Ответ

0 голосов
/ 25 марта 2020

Разветвляюсь мой комментарий к вам. Вы не можете отправить строку, которая находится в целевом пути. Это не настоящий файл. Вы можете отправить эту строку в текстовый файл, если это то, что вам нужно, но это не похоже на то, что вам нужно.

Просто пройдитесь по каждому сегменту, чтобы убедиться, что вы получаете то, что хотите. ожидайте и используйте эту цель в операторе копирования.

# 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
#>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...