Linkziele listen

  • Hi Leute,

    hat jemand eine Lösung, wie ich die Ziele aller Links der Programme(auch Unterordner) unter "\Dokumente und Einstellungen\All Users\Startmenü\Programme" bzw. "E:\Dokumente und Einstellungen\Username\Startmenü\Programme" in eine txt schreiben kann?

    Es sollten nur die .exe Dateien gelistet werden...

    Hoffe auf Hilfe!

    Gruß

    Otto99

  • Hallo und und Herzlich Willkommen,

    such mal im Forum nach der Funktion _GetFilesFolder_Rekursiv. Die liefert Dir die die Files in einem Array. Und das lässt sich Problemlos als *.txt abspeichern..

    schöne Grüße

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Hab mal das Beispielscript zum Laufen bekommen aber wie bekomme ich die Ziele in eine txt Datei geschrieben?

    Ich benötige den Namen der Anwendungen, welche dahinter stecken, z.B winword.exe, excel.exe usw.

    Da habe ich leider noch null Durchblick

    "Das Leid mit den newbies!"

  • erzeugt eine test.txt und schreibt alle *.au3 dateien des Scripdir´s hinein.

    hilft Dir das ?

    Spoiler anzeigen
    [autoit]

    $array = _GetFilesFolder_Rekursiv(@ScriptDir & '\', '.au3')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    for $i = 0 to UBound($array) -1
    FileWriteLine(@ScriptDir & "\test.txt", $array[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [,$sDate=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; optional: $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; optional: $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $sDate gibt nur Dateien/Ordner zurück, die älter sind als das angegebene Datum
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard); 1 -@CR; 2 -@LF; oder beliebiges Zeichen
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $sDate = -1, $iRetType = 0, $sDelim = '0')
    If StringLen($sDate) <> 14 Then $sDate = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDate, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, 1)
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $sDate = -1, $Delim = @CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $file.DateLastModified < $sDate Then
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If $Subfolder.DateLastModified > $sDate Then
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    EndIf
    _ShowSubFolders($Subfolder, $Ext, $Dir, $sDate, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Sieht schon mal besser aus.

    Wie bekomme ich nun die Ziele der lnk Dateien in die oder eine andere Textdatei?

    Beispiel:

    c:\Dokument und Einstellungen\All Users\Startmenü\Programme\7-Zip\7-Zip File Manager.lnk

    wird mit dem Script gelistet, ich brauche aber nur den Namen der exe die hinter dem Link liegt,

    also "7zFM.exe"

    Geht das überhaupt?

    Otto99

  • ja das geht _pathsplit

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    $array = _GetFilesFolder_Rekursiv(@ScriptDir & '\', '.au3')

    [/autoit] [autoit][/autoit] [autoit]

    Dim $szDrive, $szDir, $szFName, $szExt

    [/autoit] [autoit][/autoit] [autoit]

    for $i = 0 to UBound($array) -1
    $name = _PathSplit($array[$i], $szDrive, $szDir, $szFName, $szExt)
    FileWriteLine(@ScriptDir & "\test.txt", $name[3] & $name[4])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [,$sDate=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; optional: $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; optional: $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $sDate gibt nur Dateien/Ordner zurück, die älter sind als das angegebene Datum
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard); 1 -@CR; 2 -@LF; oder beliebiges Zeichen
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $sDate = -1, $iRetType = 0, $sDelim = '0')
    If StringLen($sDate) <> 14 Then $sDate = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDate, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, 1)
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $sDate = -1, $Delim = @CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $file.DateLastModified < $sDate Then
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If $Subfolder.DateLastModified > $sDate Then
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    EndIf
    _ShowSubFolders($Subfolder, $Ext, $Dir, $sDate, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]

    oh ich sehe gerade du möchtest ja den Dateinamen den Lnk Ziels.. Das habe ich übersehen... Sorry...

    Du kannst mit

    [autoit]

    FileGetShortcut ( "lnk" )

    [/autoit]


    Erfolg: Gibt eine Array mit den Verknüpfungsdetails zurück.

    Die Exe aus dem Lnk ziehen..

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    Einmal editiert, zuletzt von franzp (1. Dezember 2008 um 16:03)

  • Das Problem welches noch besteht, ist dass mit leider nur die *.lnk gelistet werden.

    Ich benötige aber die dahinter liegenden exe Dateien, also die Ziele der lnk Dateien...

    Hab da irgendwo was mitbekommen von FileGetShortcut, Array auslesen bla bla...

    Null Check davon ;-((

  • [autoit]

    #include <File.au3>
    #include <array.au3>
    $array = _GetFilesFolder_Rekursiv(@ScriptDir & '\test\', '.lnk')

    [/autoit][autoit][/autoit][autoit]

    Dim $szDrive, $szDir, $szFName, $szExt

    [/autoit][autoit][/autoit][autoit]

    for $i = 1 to UBound($array) -1
    $details = FileGetShortcut ($array[$i])
    $file = _PathSplit($details[0], $szDrive, $szDir, $szFName, $szExt)
    if $file[4] = ".exe" then
    FileWriteLine(@ScriptDir & "\test.txt", $file[3] & $file[4])
    EndIf
    Next

    [/autoit]

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Suppi!

    Genau das was ich gesucht habe. Hab mich auch shon durchgearbeitet.

    Man soll ja nicht dumm sterben ;-))

    Besten Dank nohmals für die propte Hilfe!

    Otto99