cbli
Goto Top

Nach bat Dateien suchen und automatisch link auf Desktop erstellen

Ist es möglich per Batch nach bat Dateien mit bestimmten Namen zu suchen und automatisch eine Verknüpfung auf den Desktop zu legen ?

Beispiel:

Auf dem Netzlaufwerk L: sind z.b 100 Bat Dateien die ich öfters benutze in verschiedenen Verzeichnissen abgelegt.
Diese bat Dateien möchte ich nun von meinem Desktop aus aufrufen können.
Nun könnte ich ja für jede Bat Datei eine Verknüpfung erstellen,doch bei der Menge (es kommen immer wieder neue hinzu aufgrund der von mir,dank dieser Seite, entdeckten Möglichkeiten die Batches bieten) wäre dies ja sehr aufwändig.
Ich möchte also eine Batch schreiben ,die automatisch auf L: nach Bat Dateien mit immer gleichem Namen sucht und automatisch eine Verknüpfung auf meinem Desktop in einem bestimmten Ordner anlegt.
Darüberhinaus sollen bei einer nächsten Suchaktion bereits vorhandene Verknüpfungen automatisch überschrieben werden, so das keine doppelten Verknüpfungen entstehen.
Außerdem wäre es wünschenswert wenn die Batch aus den gefundenen Bat Dateien jeweils die erste Zeile (oder auch eine immer gleiche andere) auslesen würde (dort will ich die Batch Beschreibung ablegen) und den gefundenen Text dieser Zeile dann als Namen für die Verknüpfung verwenden würde.

Aber ob so was möglich ist ?
Danke

Gruß
Claus

Content-Key: 45731

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

Printed on: April 19, 2024 at 01:04 o'clock

Member: bastla
bastla Nov 30, 2006 at 15:35:30 (UTC)
Goto Top
Hallo Claus!

Ich hab mal auf die Schnelle was gekaspert (wie Biber dazu sagt):
Const sBatPath = "L:\"  
Const sLnkFolder = "Alle Meine Bätche"  
Set shell = WScript.CreateObject("WScript.Shell")  
Set fso = CreateObject("Scripting.FileSystemObject")  
sLnkPath = shell.SpecialFolders("Desktop") & "\" & sLnkFolder & "\"  

'löschen  
For Each f in fso.GetFolder(sLnkPath).Files
   If Right(f.Name , 4) = ".lnk" Then  
	fso.DeleteFile(f)
   End If
Next

'neu erstellen  
For Each f in fso.GetFolder(sBatPath).Files
	If LCase(Right(f.Name, 4)) = ".bat" Or LCase(Right(f.Name, 4)) = ".cmd" Then  
		Set oBatFile = fso.OpenTextFile(f.Path, 1)
		sBatName = oBatFile.ReadLine
		oBatFile.Close
		sBatName = Replace(sBatName, ":", "")  
		sIndex = ""  
		i = 2
		Do While fso.FileExists(sLnkPath & sBatName & sIndex & ".lnk")  
			sIndex = CStr(i)
			i = i + 1
		Loop
		sShortcutName = sLnkPath & sBatName & sIndex & ".lnk"  
		set oShellLink = shell.CreateShortcut(sShortcutName)
		oShellLink.TargetPath = f.Path
		oShellLink.WindowStyle = 1
		oShellLink.WorkingDirectory = sBatPath
		oShellLink.Save
	End If
Next
Zunächst werden alle im Zielpfad "Desktop\Alle Meine Bätche" vorhandenen Verknüpfungen gelöscht, danach für alle ".bat"- oder ".cmd"-Dateien im Verzeichnis "L:\" neue Verknüpfungen erstellt.

Der Name wird wunschgemäß aus der ersten Zeile der Batch-Datei abgeleitet. Da bei mir jede Menge Verknüpfungen mit dem einprägsamen Namen "@echo off & setlocal EnableDelayedExpansion" entstünden, habe ich vorgesehen, dass bei Namensgleichheit eine laufende Nummer angefügt wird.

Da Deine ersten Zeilen vermutlich mit "::" beginnen und sich Doppelpunkte in Dateinamen nicht ganz so gut machen, werden alle Doppelpunkte aus dem Namen eliminiert.

Weitere Fehlerüberprüfungen sind bis jetzt nicht enthalten.

Für den Verknüpfungseintrag "Ausführen in:" wird das Verzeichnis "L:\" eingesetzt.

Grüße
bastla
Member: cbli
cbli Dec 01, 2006 at 12:00:13 (UTC)
Goto Top
Werde das Problem jetzt anders lösen.
Dieser Thread kann geschlossen werden.

Danke nochmal für die Hilfe

Gruß
Claus