Ordner (Ebene 2) durchsuchen, die mit Zahl beginnen?

  • Hallo Leute,

    wie kann ich folgendes erledigen.
    Es soll im Masterpfad nur nach Verzeichnissen der Ebene_2 gesucht werden die mit Zahl beginnen und diese hinterher in einem MsgBox ausgeben.

    Masterpfad: T:\PRJ\

    T:\PRJ\Ebene_1\Ebene_2

    Ausgabe im MsgBox:
    3 Projekte sind falsch abgelegt:
    T:\PRJ\2500\6005500
    T:\PRJ\2500\580500
    T:\PRJ\800000\1500800

    Besten Dank im Voraus!

    Viele Grüße,
    Dino

    3 Mal editiert, zuletzt von Dino (30. April 2012 um 23:49)

  • So?

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "c:\Test"
    Global $aFolder = _FileListToArray($sPath, "*", 2)

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

    _ArrayDisplay($aFolder)

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    _ArrayDisplay($aTmp)
    If IsArray($aTmp) Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "\d.*", 0, 0)
    If $iResult = True Then
    _ArrayAdd($aResult, $aTmp[$j])
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    _ArrayDisplay($aResult)

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hallo i2c und K4z, :party:

    das Regex-Pattern habe ich in "^\d.*" geändert. Es funktioniert super. Besten Dank! :thumbup: :rock:

    Wie bekomme ich noch die Verzeichnisse in einem MsgBox mit dem Pfad ausgegeben?

    Beispiel - MsgBox:
    3 Projekte sind falsch abgelegt:
    T:\PRJ\2500\6005500
    T:\PRJ\2500\580500
    T:\PRJ\800000\1500800

    Viele Grüße,
    Dino

  • Passiert, wenn man ißt und gleichzeitig schreibt :).

    Hier nochmal mit dem richtigen Pattern und Ausgabe als Messagebox (wie in der Shoutbox gefragt)

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "c:\Test"
    Global $aFolder = _FileListToArray($sPath, "*", 2)
    Global $sResult = ''

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    If IsArray($aTmp) Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "^\d.*", 0, 0)
    If $iResult = True Then
    ;_ArrayAdd($aResult, $aTmp[$j])
    $sResult &= $sPath & "\" & $aFolder[$i] & "\" & $aTmp[$j] & @CRLF
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    ;_ArrayDisplay($aResult)
    MsgBox(0, 0, $sResult)

    [/autoit]
  • Hallo Leute,

    gibt es die Möglichkeit, dass in diesem Code ein paar Verzeichnisse (T:\PRJ\6000;T:\PRJ\58000;T:\PRJ\Schulung;T:\PRJ\Test) eintrage, die bei der Anzeige im MsgBox ignoriert bzw. nicht berücksichtigt werden sollen?
    Falls ja, was muss ich bitte ändern?

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ Im $sPath Verzeichnis wird nur in der Ebene 2 nach Verzeichnissen gesucht, die mit Zahl beginnen

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

    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "T:\PRJ"
    Global $aFolder = _FileListToArray($sPath, "*", 2)
    Global $sResult = ''

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    If IsArray($aTmp) Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "^\d.*", 0, 0)
    If $iResult = True Then
    ;_ArrayAdd($aResult, $aTmp[$j])
    $sResult &= $sPath & "\" & $aFolder[$i] & "\" & $aTmp[$j] & @CRLF
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    ;_ArrayDisplay($aResult)
    MsgBox(0, "Falsch abgelegte Projekte?", $sResult)

    [/autoit]

    Besten Dank!

    Viele Grüße,
    Dino

  • Das ist zumindest eine Möglichkeit, hier werden alle Ausnahmen in $aExcept (Element 0 = Anzahl der Ausnahmen) eingetragen und dann später bei der If Abfrage ignoriert.

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ Im $sPath Verzeichnis wird nur in der Ebene 2 nach Verzeichnissen gesucht, die mit Zahl beginnen

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

    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "T:\PRJ"
    Global $aExcept[5] = [4, "T:\PRJ\6000", "T:\PRJ\58000", "T:\PRJ\Schulung", "T:\PRJ\Test"]
    Global $aFolder = _FileListToArray($sPath, "*", 2)
    Global $sResult = ''

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    If IsArray($aTmp) Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "^\d.*", 0, 0)
    $bExcept = False
    For $k = 1 To $aExcept[0]
    If $aTmp[$j] = $aExcept[$k] Then $bExcept = True
    Next
    If $iResult = True And $bExcept = False Then
    ;_ArrayAdd($aResult, $aTmp[$j])
    $sResult &= $sPath & "\" & $aFolder[$i] & "\" & $aTmp[$j] & @CRLF
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    ;_ArrayDisplay($aResult)
    MsgBox(0, "Falsch abgelegte Projekte?", $sResult)

    [/autoit]


    Ungetestet, aber sollte klappen.

  • Hallo name22,

    1. ich habe es getestet und die Verzeichnisse werden weiterhin im MsgBox aufgeführt. ?(
    2. Kann ich es auch so schreiben: ....$sPath & "Schulung" ?
    Wenn sich der $sPath ändern sollte, damit ich unter $aExcept nicht viel ändern muss.

    VG,
    Dino

  • Ups.. Ich hab vergessen, dass _FileListToArray den Pfad nicht mit angibt ^^. So würde es funktionieren (hoffe ich ;)):

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ Im $sPath Verzeichnis wird nur in der Ebene 2 nach Verzeichnissen gesucht, die mit Zahl beginnen

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

    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "T:\PRJ"
    Global $aExcept[5] = [4, "T:\PRJ\6000", "T:\PRJ\58000", "T:\PRJ\Schulung", "T:\PRJ\Test"]
    Global $aFolder = _FileListToArray($sPath, "*", 2)
    Global $sResult = ''

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    If IsArray($aTmp) Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "^\d.*", 0, 0)
    $bExcept = False
    For $k = 1 To $aExcept[0]
    If $sPath & "\" & $aTmp[$j] = $aExcept[$k] Then
    $bExcept = True
    ExitLoop
    EndIf
    Next
    If $iResult = True And $bExcept = False Then
    ;_ArrayAdd($aResult, $aTmp[$j])
    $sResult &= $sPath & "\" & $aFolder[$i] & "\" & $aTmp[$j] & @CRLF
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    ;_ArrayDisplay($aResult)
    MsgBox(0, "Falsch abgelegte Projekte?", $sResult)

    [/autoit]


    Du kannst es aber auch so machen (im Grunde die Version von Beitrag 8 :(

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ Im $sPath Verzeichnis wird nur in der Ebene 2 nach Verzeichnissen gesucht, die mit Zahl beginnen

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

    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "T:\PRJ"
    Global $aExcept[5] = [4, "6000", "58000", "Schulung", "Test"]
    Global $aFolder = _FileListToArray($sPath, "*", 2)
    Global $sResult = ''

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    If IsArray($aTmp) Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "^\d.*", 0, 0)
    $bExcept = False
    For $k = 1 To $aExcept[0]
    If $aTmp[$j] = $aExcept[$k] Then
    $bExcept = True
    ExitLoop
    EndIf
    Next
    If $iResult = True And $bExcept = False Then
    ;_ArrayAdd($aResult, $aTmp[$j])
    $sResult &= $sPath & "\" & $aFolder[$i] & "\" & $aTmp[$j] & @CRLF
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    ;_ArrayDisplay($aResult)
    MsgBox(0, "Falsch abgelegte Projekte?", $sResult)

    [/autoit]


    Und dann den Pfad vor den Ausnahmen komplett weglassen. Also z.B. "T:\PRJ\Schulung" -> "Schulung".

  • Hallo name22,

    es funktioniert immer noch nicht ;)
    Vielleicht haben wir uns mißverstanden. Die vier aufgeführten Verzeichnisse sollen von der Prüfung nicht berücksichtigt werden.

    Viele Grüße,
    Dino

  • Zitat

    Vielleicht haben wir uns mißverstanden


    Jup. Lag aber größtenteils an mir. Ich dachte erst, du willst in der zweiten "Ebene" die Ordner ausschließen... ^^
    So funktioniert es bei mir, ich hoffe es klappt bei dir dann auch...

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ Im $sPath Verzeichnis wird nur in der Ebene 2 nach Verzeichnissen gesucht, die mit Zahl beginnen

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

    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "T:\PRJ"
    Global $aExcept[5] = [4, "6000", "58000", "Schulung", "Test"]
    Global $aFolder = _FileListToArray($sPath, "*", 2)
    Global $sResult = ''

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    $bExcept = False
    For $j = 1 To $aExcept[0]
    If $aFolder[$i] = $aExcept[$j] Then
    $bExcept = True
    ExitLoop
    EndIf
    Next
    If IsArray($aTmp) And $bExcept = False Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "^\d.*", 0, 0)
    If $iResult = True Then
    ;_ArrayAdd($aResult, $aTmp[$j])
    $sResult &= $sPath & "\" & $aFolder[$i] & "\" & $aTmp[$j] & @CRLF
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    ;_ArrayDisplay($aResult)
    MsgBox(0, "Falsch abgelegte Projekte?", $sResult)

    [/autoit]
  • Hallo name22,

    bei mir funktioniert jetzt auch :rock: Danke!

    Fragen:
    1. Wenn ich 12 Verzeichnisse ausschließen möchte, schreibe ich es dann so Global $aExcept[13] = [12, ..... ? Oder?
    2. MsgBox(0, "xxx Falsch abgelegte Projekte?", $sResult)
    Lässt sich, da wo ich in rot xxx eingetragen habe, die Anzahl der gefundene Verzeichnisse eintragen?

    Viele Grüße,
    Dino

  • Zu 1. Ja, in der ersten eckigen Klammer steht die Anzahl der Array Elemente und im ersten Element steht die Anzahl der eigentlichen Ausnahmen für die Suche.
    Zu 2. Ich hab das Script mal entsprechend angepasst. Aber wozu brauchst du da überhaupt noch das Array $aResult?

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;~ Im $sPath Verzeichnis wird nur in der Ebene 2 nach Verzeichnissen gesucht, die mit Zahl beginnen

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

    #include <File.au3>
    #include <Array.au3>
    Dim $aResult[1] = [0]

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

    Global $element
    Global $sPath = "T:\PRJ"
    Global $aExcept[5] = [4, "6000", "58000", "Schulung", "Test"]
    Global $aFolder = _FileListToArray($sPath, "*", 2)
    Global $sResult = ''

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

    If IsArray($aFolder) Then
    For $i = 1 To $aFolder[0]
    $aTmp = _FileListToArray($sPath & "\" & $aFolder[$i], "*", 2)
    $bExcept = False
    For $j = 1 To $aExcept[0]
    If $aFolder[$i] = $aExcept[$j] Then
    $bExcept = True
    ExitLoop
    EndIf
    Next
    If IsArray($aTmp) And $bExcept = False Then
    For $j = 1 To $aTmp[0]
    $iResult = StringRegExp($aTmp[$j], "^\d.*", 0, 0)
    If $iResult = True Then
    ;_ArrayAdd($aResult, $aTmp[$j])
    $sResult &= $sPath & "\" & $aFolder[$i] & "\" & $aTmp[$j] & @CRLF
    $aResult[0] += 1
    EndIf
    Next
    EndIf
    Next
    EndIf

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

    ;_ArrayDisplay($aResult)
    MsgBox(0, $aResult[0] & " Falsch abgelegte Projekte?", $sResult)

    [/autoit]
  • Vielen Dank name22!

    Array $aResult, das kommt aus dem Post 5 von "i2c". Ich weiß es auch nicht, wofür es steht. Jedenfalls funktioniert alles :rock: :thumbup: :thumbup:

    Viele Grüße,
    Dino