Programm auf einer partition finden!

  • Hallo an alle!

    Ich möchte ein Skript basteln das ein bestimmte datei findet und startet tut, ob es auf C: oder G: ist.

    mein besipiel ich habe auf meiner partition H: ein ordner erstellt ZULI mit einer .exe datei, jetzt wollte ich es so basteln das er mir sucht wie viele partition existieren und dann denn ordner mit der .exe findet und startet.

    nun weiß ich genau wie ich vorgehen soll ich müsste doch zuerst einmal bestimmt die anzahl der partition auslesen lassen und dann mit einer variable mit der genaue beschreibung des pfard.

    oder ist es noch besser über die Regedit funktion es zu finden.

    Bitte um Hilfe es wer schön wenn einer mir ein kleines Tutorial erstellt ob es über der regedit besser ist oder die partition suche.

    MfG

    Baron

  • [autoit]

    _FileListToArray()

    [/autoit]


    Kann dir da bestimmt helfen; du musst dann halt jeden ordner bis zumletzten zweig durchgehen ;)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Ich habe es mir eigendlich mehr so gedachtet doch komme da nicht weiter er soll mir auch keine anderen zeug anzeigen.

    [autoit]

    $var = DriveGetDrive( "FIXED"='ZULI\testhals.exe' )
    If NOT @error Then
    anwendung starten
    For $i = 1 to $var[0]
    MsgBox(4096,"Laufwerk " & $i, $var[$i])
    Next
    EndIf

    [/autoit]

    doch ich bekomme es nicht hin mit der genauen lösung meines problem.

    er soll die z.B. die 'testhals.exe auf der partition suchen und wenn sie erkannt ist starten doch wie.????

    Gruß

    Baron

  • Wenn du genau weißt, in welchem Pfad die Datei liegt und du nur den Laufwerksbuchstaben nicht weißt, dann funktioniert so etwas:

    [autoit]

    $aDrives = DriveGetDrive("FIXED")
    For $drive in $aDrives
    If FileExists($drive & "\PFAD\datei.exe") Then
    Run($drive & "\PFAD\datei.exe")
    ExitLoop
    EndIf
    Next

    [/autoit]

    Wenn du den Pfad nicht kennst und die Suche sehr schnell gehen soll, dann musst du bei NTFS die Master File Table (MFT) durchsuchen. Das ist aber nicht einfach und in AutoIT gibt es dazu noch keinen Code.

  • Zitat

    oder ist es noch besser über die Regedit funktion es zu finden.

    Besser

    [autoit]

    regread

    [/autoit][autoit]

    $installdir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt","InstallDir")
    MsgBox(0,"Wo ist AutoIt installiert?",$installdir)

    [/autoit]

    Wenn sich da Programm irgendwo in de Registry verewigt sollte man das auch nutzen,
    es gestaltet dein Script einfacher und das Suchen geht auch schneller.

    Einfach mal nach dem Programmnamen in suchen in dem Fall "F3" in regedit und bei Erfolg den Zweizeiler oben anpassen.

    Ggf. auch OS-Arch berücksichtigen:

    [autoit]

    If @OSArch = "X86" Then
    $regpath = "HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt"
    Else
    $regpath = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt"
    EndIf

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

    $installdir = RegRead($regpath,"InstallDir")
    MsgBox(0,"Wo ist AutoIt installiert?",$installdir)

    [/autoit]

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    2 Mal editiert, zuletzt von Dietmar (21. Mai 2011 um 15:26)

  • Hallo DFPWare,

    wenn du nur den Dateinamen (mit Erweiterung weist) kannst du es so machen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $sFileToFind = InputBox("einzelne Datei suchen","Dateiname mit Erweiterung angeben!")

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

    $sType = "Fixed" ;möglich sind "ALL", "CDROM", "REMOVABLE", "FIXED", "NETWORK", "RAMDISK" oder "UNKNOWN"
    _SearchForFile($sFileToFind,$sType)
    ;
    Func _SearchForFile($sFileToFind,$sType)
    $adrives = DriveGetDrive($sType)
    for $i = 1 to $adrives[0]
    $aSearch = _SearchInDrive($sFileToFind, $adrives[$i]&"\")
    for $j = 0 to UBound($aSearch) -1
    $aItem = StringSplit($aSearch[$j],"\")
    if $aItem[$aItem[0]] = $sFileToFind Then
    ShellExecute($aSearch[$j])
    ExitLoop 2
    EndIf
    Next
    Next
    EndFunc

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

    Func _SearchInDrive($sFile, $sDir = "\")
    Local $aReturn
    RunWait(@ComSpec & ' /C dir /S /B /A: H S R A ' & $sDir & ' | FIND /I "' & $sFile & '" > ' & @TempDir & '\TempSearch.TXT', "", @SW_HIDE)
    Return StringSplit(StringStripWS(FileRead(@TempDir & '\TempSearch.txt'), 3), @CRLF, 3)
    EndFunc

    [/autoit]

    dauert aber logischerweise etwas länger, wenn du also wirklich nur den Laufwerksbchstaben nicht weist solltest du progandy 's Vorschlag nehmen,

    mfg autoBert