gerry56
Goto Top

Windows Verknüpfung (lnk) in Symlink umwandeln

Auf einem Windows PC soll zusätzlich Linux installiert werden.
Das ist kein Problem.

Jedoch sind auf der Datenplatte dieses Computers viele Verknüpfungen (LNK) für Dateien vorhanden.
Diese Links erkennt jedoch nur Windows und kein Linux.

Softlinks für Dateien würden sowohl von Windows, als auch von Linux erkannt werden.
Gibt es eine Möglichkeit, mittels eines Scripts (Batch oder VBA) für alle vorhandenen Verknüpfungen einen Softlink zu erstellen, und danach die Verknüpfung zu löschen?

Danke im voraus

Gerry

Content-ID: 671094

Url: https://administrator.de/forum/windows-verknuepfung-lnk-in-symlink-umwandeln-671094.html

Printed on: February 9, 2025 at 07:02 o'clock

DivideByZero
DivideByZero Feb 02, 2025 at 14:01:44 (UTC)
Goto Top
Moin,

hier hat das jemand schon mal komplett umgesetzt: Convert .lnk shortcut to symlink.

Gruß

DivideByZero
gerry56
gerry56 Feb 02, 2025 updated at 14:29:12 (UTC)
Goto Top
Danke für den Hinweis.
Laut Beitrag - übersetzt mit Google - ist der Befehl für das CLI-Tool shortcut2symlink und daher nicht für Batch oder VBA geeignet.
DivideByZero
DivideByZero Feb 02, 2025 at 14:53:53 (UTC)
Goto Top
Es ist eine Python-Library mit Python-Skript und daher natürlich auch in einer Batch aufrufbar.
Kannst Du natürlich mit entsprechendem Aufwand auch in VBA nachbauen, aber das hier ist fix und fertig.
151434
Solution 151434 Feb 03, 2025 updated at 10:14:03 (UTC)
Goto Top
Lässt sich auch schnell selbst mit der Powershell Bordmitteln abfackeln
$folder = 'D:\QuellOrdner'  
$shell = New-Object -Com Wscript.Shell
$ErrorActionPreference = 'Stop'  
foreach($file in Get-Childitem -LiteralPath $folder -File -Filter *.lnk -Recurse){
    try{
        $lnk = $shell.CreateShortcut($file.Fullname)
        New-Item -ItemType SymbolicLink -Path (join-path (split-path $file.Fullname -Parent) (split-path $lnk.TargetPath -Leaf)) -Value $lnk.TargetPath
        Remove-Item -LiteralPath $file.Fullname -Force
    }catch{
        write-host  "Fehler bei Verarbeitung des Links '$($file.Fullname)' : $($_.Exception.Message)" -F Red  
    }
}

Wenn es unbedingt noch VBA sein muss geht auch das

Dim fso, shell

' Pfad anpassen und diese Prozedur starten  
Sub ConvertToSymbolicLinks()
    Const folder = "D:\Quellordner"  
    Set fso = CreateObject("Scripting.Filesystemobject")  
    Set shell = CreateObject("Wscript.Shell")  
    RecurseFolder fso.GetFolder(folder), True
End Sub

Function RecurseFolder(strFldr, boolRecursion)
    For Each file In strFldr.Files
        If LCase(fso.GetExtensionName(file.Path)) = "lnk" Then  
            Set lnk = shell.CreateShortcut(file.Path)
            shell.Run "cmd /c mklink """ & fso.GetParentFolderName(lnk.FullName) & "\" & fso.GetFileName(lnk.TargetPath) & """ """ & lnk.TargetPath & """", 0, True  
            file.Delete True
        End If
    Next
    If boolRecursion Then
        For Each subFolder In strFldr.SubFolders
            RecurseFolder subFolder, True
        Next
    End If
End Function
Gruß goldcap
DivideByZero
DivideByZero Feb 03, 2025 at 09:23:26 (UTC)
Goto Top
Guten Morgen goldcap,

danke, bei unserem Powershell-Spezialisten wieder etwas gelernt! Wusste nicht, dass die Powershell den Inhalt der lnk Files direkt verarbeitet. Ist natürlich eine klasse Lösung!
gerry56
gerry56 Feb 04, 2025 at 18:52:26 (UTC)
Goto Top
Vielen Dank an Goldcap.
Gerry