2016-01-29 2 views
0

Мои ярлыки часто ломаются, потому что я перемещаю вещи и, к сожалению, отслеживание ссылок Windows не может идти в ногу. Есть ли способ программно (с Powershell) читать и редактировать свойства ярлыка? Я хотел бы запустить скрипт, который ищет весь жесткий диск (или там, где я указать) для файла, который соответствует целевому имени, а затем обновить ярлык с этим новым местом, предполагая, что это правильный файл.программно редактирует ярлыки Windows

+0

Существует несколько компонентов для этого, но да, это возможно. Создание shorcut происходит от http://stackoverflow.com/questions/9701840/how-to-create-a-shortcut-using-powershell. Вы можете использовать эту логику, чтобы помочь их редактировать. Попробуйте что-нибудь, и если вы застряли, вернитесь и обновите свой вопрос. – Matt

ответ

-1

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

https://github.com/gangstanthony/PowerShell/blob/master/Create-Shortcut.ps1

# Create-Shortcut 
# 
# Create-Shortcut -Source C:\temp\test.txt -DestinationLnk C:\temp\test.txt.lnk 
# 
# Arguments 
# Description 
# FullName 
# Hotkey 
# IconLocation = '%SystemRoot%\system32\SHELL32.dll,16' # printer 
# RelativePath 
# TargetPath 
# WindowStyle 
# WorkingDirectory 

function Create-Shortcut { 
    param (
     [string]$Source, 
     [string]$DestinationLnk, 
     [string]$Arguments 
    ) 

    BEGIN { 
     $WshShell = New-Object -ComObject WScript.Shell 
    } 

    PROCESS { 
     if (!$Source) {Throw 'No Source'} 
     if (!$DestinationLnk) {Throw 'No DestinationLnk'} 

     $Shortcut = $WshShell.CreateShortcut($DestinationLnk) 
     $Shortcut.TargetPath = $Source 
     if ($Arguments) { 
      $Shortcut.Arguments = $Arguments 
     } 
     $Shortcut.Save() 
    } 

    END { 
     function Release-Ref ($ref) { 
      ([System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$ref) -gt 0) 
      [System.GC]::Collect() 
      [System.GC]::WaitForPendingFinalizers() 
     } 
     $Shortcut, $WshShell | % {$null = Release-Ref $_} 
    } 
} 
+0

Этот ответ является ссылкой и может быть помечен. – Matt

+0

'$ sh = New-Object -COM WScript.Shell; $ targetPath = $ sh.CreateShortcut ('C: \ Full \ Path \ To \ test.lnk'). TargetPath' –

Смежные вопросы