Dateiverknüpfungen per Tool / Batch aktualisieren?

Absalon

Newbie
Registriert
Feb. 2023
Beiträge
3
Hallo zusammen!

Über (viele) Dateiverknüpfungen werden die Inhalte eines Laufwerks mit mehreren 1.000.000 Dateien erschlossen. Da öfter Unterordner verschoben werden, sind diese Links dann "tot".
Gibt es ein Tool, das per Batch die Pfadnamen in den .lnk ändert? Es geht mir nicht um das Auffinden der verschobenen Ordner/Dateien, das klappt schon. Wenn allerdings für einzelne Dateien oder viele Unter-Ordner Links angelegt wurden und diese aktualisiert werden sollen, wäre solch ein Tool sehr hilfreich.

Beispiel:
aus
x:\bla\blub\1.jpg
wurde
x:\bla\blubber\fresh\1.jpg
Und das für Bilder 1 bis 385.

In Bild1.lnk bis Bild385.lnk soll also blub durch blubber\fresh ersetzt werden. In diesem Beispiel also 385 Ersetzungen in den Verweiszielen der 385 .lnk-Dateien.

Ich hoffe, ich habe meine Frage verständlich formuliert...
 
Ich würde für sowas den Total Commander benutzen.
Den zu ersetzenden Begriff als Suchstring verwenden und dann bei den gefundenen Dateien die Suchen/Ersetzen Funktion benutzen.
 
Moin und danke für den Hinweis. Welches Plugin im TC guckt denn in die .lnk's und kann diese gewünschte Art Ersetzung durchführen?
 
Da gibts ein kleines Tool: Shortcut. Der integrierte Weg ginge über die Batch (und Windows Script Host/VBScript), was aber elendig langsam ist. Einen Weg über die PowerShell gäbe es auch, greift aber genauso auf die COM API zu (= langsam). Das Tool schreibt direkt in die LNK-Dateien.

Klingt aber irgendwie komisch, wenn du Strukturen millionenfach über Verknüpfungen abbildest.
 
Danke für den Hinweis!
Ich habe mir das System nicht ausgedacht, ich versuche nur, das Chaos zu bändigen...
Ob ich bei den genannten Tools durchblicke, muss ich mal sehen.
Gibt es die gewünschte Funktion denn in keinem Programm(-Paket), ist das so exotisch? Man kann ja mit diversen Programmen alle möglichen Eigenschaften von Dateien auch paketweise ändern. Warum also das Verweisziel von .lnk-Dateien nicht?
 
Ich denke schon, dass das sehr exotisch ist. Wie gesagt kenne ich keine einzige Notwendigkeit "Millionen" an Verknüpfungen zu erstellen um eine individuelle Ordnerstruktur nachzubilden (schätze ich mal). Allein der Wartungsaufwand dafür wäre imho viel zu hoch und das Tooling drumrum existiert so auch nicht. Merkst du ja selbst grad.

Die "schnelle" und integrierte Lösung existiert wie gesagt über COM-Objekte und ist über VBScript bzw. COM auch über die PowerShell erreichbar. Der Weg ist allerdings extrem langsam. Ich wollte das mal mit meinen Filmen machen (niedrige, vierstellige Anzahl an Dateien), hat aber trotzdem viele Minuten gebraucht. Grund war die Unfähigkeit der Windows 10 Bibliotheken SMB-Shares hinzuzufügen.

Schneller gehts nur die Datei direkt zu modifizieren, was entsprechend wenige (Milli-)Sekunden benötigt. Dafür gibts aber kein integriertes Tool, aber einige Drittanbieterlösungen. Eines hab ich dir verlinkt, das nutze ich persönlich schon sehr lange. Also ne Lösung gibts schon (über die Dateieigenschaften bearbeiten), aber das ist natürlich nicht automatisierbar...

Die Spezifikation für Verknüpfungen existiert auch offiziell. Das Format sollte also von allen, die sich daran halten, problemlos geparst und geschrieben werden können.

Das alles aber fix in ein PowerShell-Script zu packen ist auch kein Akt.

Ungetestet:
PowerShell:
Get-ChildItem "C:\Pfad\zu\den\Verküpfungen" -Recurse -Filter "*.lnk" | ForEach-Object {
    $lnkPath = $_.FullName
    $currentTargetPath = (& shortcut "/F:$lnkPath" /A:Q | Select-String "TargetPath=").Split("=", 2)[1]

    $newTargetPath = $currentTargetPath -replace "alter\Pfad", "neuer\Pfad"

    & shortcut "/F:$lnkPath" /A:E "/T:$newTargetPath"
}
Error Handling, Tests usw. müsstest du natürlich selbst durchführen.
 
Absalon schrieb:
ist das so exotisch?
Offensichtlich, seit es Verknüpfungen gibt.
Ich habe über VBS eine bescheidene Anzahl Links revidiert. MS hat mit den LNK einfach Murks geliefert, statt wie INIs als Klartext der durch jeden Parser laufen kann wurde ein Chaosformat eingesetzt.
Nicht exotisch sondern unsinnig. Leider hat das Toolentwickler abgeschreckt weil der Laie einfach neue Verknüpfungen anlegt statt schon aufbereitete zu revidieren…

Ich sehe da fast eine Ironie. Um ein Skript anzustrengen muss das ja wissen was vorher war und jetzt ist, und auch wo die Verknüpfung gerade weilt.
Also hätte ich eine Art Datenbank organisiert in der ich «Landmarken» verwalte. Ein Suchtool muss dann die expliziten Landmarken finden und kann dann die bekannte Verknüpfung analog anpassen. Das muss nicht gerade stündlich laufen, aber gewissermaßen täglich. Dürfen die Ordner (woher erfährst du denn das Vorher und das Jetzt..?) keine «Landmarken» enthalten musst du die Datenbank Manuell pfegen und dann die Renovierung auslösen.

CN8
 
Zurück
Oben