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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 45731
Url: https://administrator.de/contentid/45731
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo Claus!
Ich hab mal auf die Schnelle was gekaspert (wie Biber dazu sagt):
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
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
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