onevoice73
Goto Top

Verknüpfungen (*.LNK) durch Dateien ersetzen...

...oder die Erzeugung von realtiven Verknüpfungspfaden?

Guten Tag!

Nachdem ich fast das ganze Netz durchforstet habe und beim Googeln auf dieses Forum gestossen bin, in dem scheinbar professionellere Hilfe angeboten wird als in anderen Bereichen, versuche ich nun hier mein Glück.

Mein Problem:
In einem Hauptverzeichnis befinden sich Dateien.
In Unterverzeichnissen befinden sich Verknüpfungen auf die o.g. Dateien.
In der Eigenschaft der *.LNK-Datei wird das Ziel als absolute Pfadangabe angegeben.
Wenn ich nun das Hauptverzeichnis incl. aller Datein, Unterverzeichnisse und die darin enthaltenen Verknüpfungen auf CD brenne, funktionieren die Verknüpfungen nicht auf anderen Rechnern, in denen ich die CD einlese (da die gespeicherten Pfade nicht vorhanden sind).

Ursprünglich war ich auf der Suche nach einer Möglichkeit, die gespeicherten absoluten Pfadangaben (in der Zielangabe der *.LNK) durch relative Pfadangaben zu ersetzen. Das scheint leider nicht zu funktionieren face-sad
Zumindest habe ich im Netz nichts dergleichen finden können. Falls hier jemand dafür eine Lösung anbieten könnte, wäre ich wirklich sehr dankbar!

Da ich davon ausgehe, dass der eben genannte Lösungsansatz nicht funktionieren wird, habe ich mir alternativ noch folgende Verfahrensweise überlegt (und deshalb schreibe ich in diesem Forumsbereich):
Wie könnte man es bewerkstelligen, dass (mittels einer Routine) die Verknüpfungen durch die eigentlichen Dateien aus dem Hauptverzeichnis quasi überschrieben werden (ich benötige danach die Verknüpfungen ja eigentlich nicht mehr)?
Einzige Schwierigkeit dabei: Die Verknüpfungen heißen anders als die ursprünglichen Dateien und die überschreibenden Originaldateien müssen danach diesen Namen (der Verknüpfung) wieder erhalten.

Diese Geschichte manuell abzuarbeiten, käme einer Strafarbeit gleich. Anzahl Dateien plus deren Verknüpfungen: weit über 4000!

Für jede brauchbare Antwort wäre ich sehr dankbar!

Ach ja: Mein Betriebssystem ist WinXP.

Lieben Gruß!

Content-ID: 53424

Url: https://administrator.de/contentid/53424

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

bastla
bastla 07.03.2007 um 14:26:46 Uhr
Goto Top
Hallo OneVoice73 und willkommen im Forum!

Was relative Verknüpfungspfade anlangt - leider auch bei mir Fehlanzeige ...

Das folgende VBScript erwartet als einziges Argument die Angabe des Pfades, in dem die Verknüpfungen gespeichert sind und versucht dann, alle Verknüpfungen durch die verknüpften Dateien zu ersetzen.

Der neue Name der kopierten Datei setzt sich aus dem Dateinamen der Verknüpfung und dem Dateityp der verknüpften Datei zusammen.

'ReplaceLinks.vbs  
If WScript.Arguments.Count < 1 Then
	WScript.Echo "Kein Pfad übergeben!"  
	WScript.Quit(1)
End If

Pfad = WScript.Arguments(0)
Set fso = CreateObject("Scripting.FilesystemObject")  
Set objShell= WScript.CreateObject("Wscript.Shell")  
If Not fso.FolderExists(Pfad) Then
	WScript.Echo "Pfad ungültig!"  
	WScript.Quit(1)
End If
If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"  

For Each Datei In fso.GetFolder(Pfad).Files
	If LCase(Right(Datei.Name, 4)) = ".lnk" Then  
		Set objShortcut = objShell.CreateShortcut(Datei.Path)
		Prog = objShortcut.TargetPath
		If InstrRev(Prog, ".") Then  
			PName = Left(Datei.Name, Len(Datei.Name) - 4) & Mid(Prog, InstrRev(Prog, "."))  
		Else
			PName = Left(Datei.Name, Len(Datei.Name) - 4)
		End If
		If fso.FileExists(Prog) Then
			fso.CopyFile Prog, Pfad & PName
		End If
		Set objShortcut = Nothing
		fso.DeleteFile(Datei.Path)
	End If
Next
WScript.Echo "Fertig."  
Das Script ist bisher nur oberflächlich getestet und weist auch nur ansatzweises Errorhandling (Parameterübergabe) auf ...

Grüße
bastla
Nemia
Nemia 07.03.2007 um 14:32:11 Uhr
Goto Top
Dazu fällt mir leider auch nichts ein.
Wozu brauchst du die Dateien? Zum Kopieren auf die anderen PC's? Wenn diese PC's noch "nackt" sind (also ohne gespeicherte Dateien), dann wäre ein Image (zB: mit Norton Ghost) am Einfachsten.
OneVoice73
OneVoice73 07.03.2007 um 16:24:06 Uhr
Goto Top
Das ist ja der totale Wahnsinn!
Diese Lösung reicht mir bereits voll und ganz!
Vielen Dank, bastla!!!

Eine kleine Änderung musste ich allerdings vornehmen:

'If InstrRev(Prog, ".") Then
'PName = Left(Datei.Name, Len(Datei.Name) - 4) & Mid(Prog, InstrRev(Prog, "."))
'Else
PName = Left(Datei.Name, Len(Datei.Name) - 4)
'End If

Sprich: Den IF-Block benötige ich gar nicht. Die Anweisung im ELSE reicht mir völlig (kleiner kosmetischer Fehler: "*.txt.txt").

Und die Schnelligkeit der Antwort wirft mich ja echt um!
Besten Dank nochmal! Sie haben mir unheimlich viel Arbeit erspart!

Lieben Gruß!

Thema = closed!