Ordnerstruktur - nur Ordner mit String " - 2020" ohne Dateien in gleichnamige Ordner " - 2021" kopieren

  • Hallo,

    ich habe eine tief verschachtelte Ordnerstruktur auf d:\test bis zu 24 Ebenen.

    Einige Ordnernamen enthalten den String " - 2020".

    Ausschließlich diese möchte ich ohne Dateien in der gleichen Ordnerstruktur auf e:\test kopieren und dabei " - 2020" gegen " - 2021" austauschen.

    Habt Ihr dafür eine Funktion oder ein Beispiel parat?

    Dircopy / Filecopy scheinen von Hause aus keine Beschränkung hinsichtlich der Anfrage zu haben.

    Eventuell wäre das Script von Oscar ein guter Ansatz. Falls ja, wie würdet Ihr das Script modifizieren, um zum Ziel zu kommen?

    Sonnige Grüße.

  • Wo liegt der Vorteil von

    _FileListToArrayRec

    gegenüber der von Oscar verwendeten Funktion

    _RecursiveFileListToArray?

    Funktion lesen!

    Oscars Funktion erlaubt es mit einem RegEx-Pattern das Dateisystem zu durchsuchen. Mit einem RegEx Pattern kannst du bestimmte Dateinamenstrukturen angeben. Z.B. Dateiname soll fünf As enthalten, wobei die Zahlenfolge 111 vorangestellt und die Zahlenfolge 222 hintangestellt ist.

  • Oscars Funktion erlaubt es mit einem RegEx-Pattern das Dateisystem zu durchsuchen.

    Ja, die RegEx-Option ist natürlich mächtiger.

    Aber auch _FileListToArrayRec erlaubt eine für Banana_2_Day 's Zwecke ausreichende Angabe eines Filters :

    AutoIt
    #include <File.au3>
    #include <FileConstants.au3>
    #include <Array.au3>
    
    Local $sFilePath = @ScriptDir & "\"
    Local $aFolderList = _FileListToArrayRec($sFilePath, '*-2020', $FLTA_FOLDERS, $FLTAR_RECUR)
    _ArrayDisplay($aFolderList)

    EDIT : Banana_2_Day :

    Ich sehe gerade, dass Du ein Leerzeichen zwischen - und 2020 stehen hast. Außerdem steht der gesuchte String - 2020 nicht zwingend am Ende.

    Verwende als Filter daher : '*- 2020*'

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    2 Mal editiert, zuletzt von Musashi (16. Juli 2020 um 12:38) aus folgendem Grund: Antwort erweitert

  • Außerdem steht der gesuchte String - 2020 nicht zwingend am Ende.

    Danke und ja, das stimmt.

    Mit Deinem Script erhalte ich nur die Verzeichnistiefe bis inklusive " - 2020".

    Vorgabe (das möchte ich mit dem Script finden)

    c:\a\b\c\d - 2020 abc\e\f\g\h\f\\a\b

    Ich erhalte mit Deinem Script

    c:\a\b\c\d - 2020 abc

    Die Unterverzeichnisse fehlen.

    Beispiel für so einen Pfad:

    c:\a\b\c\d - 2020 abc\e\f\g\h

    c:\a\b\c\d - 2020 abc\e\f\g\h\i

    c:\a\b\c\d - 2020 abc\e\f\g\h\f\\a\b

    c:\a\b\c\d\e\f\g - 2020 ef\h

    Ich möchte die komplette Verzeichnisstruktur inklusive Unterverzeichnisse haben, wenn im gesamten Pfad der String " - 2020" an irgendeiner Stelle enthalten ist.

    Wie kann ich das lösen?

  • Die Frage nach den Vorteilen bezog sich auf meine Fragestellung, also welche Funktion eher zum Ziel führt.

    Wenn auch die Ordner unterhalb der Ordner mit - 2020 angezeigt werden sollen, dann ist die Funktion von Oscar besser geeignet !

    AutoIt
    #include <Array.au3>
    $sPath    = @ScriptDir
    $sPattern = '(?i)\- 2020'
    $aDirs = _RecursiveFileListToArray($sPath, $sPattern, 2)
    _ArrayDisplay($aDirs)
    
    [... Rest wie gehabt]

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."