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

Ausgedruckt am: 12.03.2025 um 11:03 Uhr

DivideByZero
DivideByZero 02.02.2025 um 15:01:44 Uhr
Goto Top
Moin,

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

Gruß

DivideByZero
gerry56
gerry56 02.02.2025 aktualisiert um 15:29:12 Uhr
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 02.02.2025 um 15:53:53 Uhr
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
Lösung 151434 03.02.2025 aktualisiert um 11:14:03 Uhr
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 $file.DirectoryName (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 03.02.2025 um 10:23:26 Uhr
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 04.02.2025 um 19:52:26 Uhr
Goto Top
Vielen Dank an Goldcap.
Gerry