Ich benötige einen Denkanstoss beim kopieren von Dateien

  • Hallo zusammen,

    jetzt nach über einem Jahr ist mir ein kleiner Fehler aufgefallen.

    Sind die Dateinamen in dieser Form 2017-SUN-10743.nef werden sie gefunden und kopiert, jedoch an einer Kamera kann ich nur maximal 8 Stellen angeben so wie hier _SUN1409.nef
    Wie kann ich die Suche verändern , dass beide Arten von Namen gefunden und kopiert werden ?

    Ich denke diese Zeile muß ich anpassen, habe schon einiges versucht will aber nicht klappen.

    $result=StringRegExp($arTmpFiles[$i],"\d*"&$sDelimeter&"(?:.*?)"&$sDelimeter&"(.*?)"&$sDelimeter&"(\d*)"&$sDelimeter,1);Den Namen und den Stern auslesen

    Oder liegt es an dieser Zeile :

    $arSearch=_findFilesWithString("s:\2017","\d{4}-SUN-(.*nef)")

    Ich hoffe Ihr könnt mir helfen. Dankeschön


    Hier das ganze Programm:

    #include <file.au3>
    #include <array.au3> ; wird nur für _Arraydisplay am Ende gebraucht! kann dann eventuell entfernt werden
    $file = "C:\Fotoauswahl\test.csv" ; einzulesende csv Datei
    $arTmpFiles=FileReadToArray($file);Datei einlesen
    $input1 = InputBox ("Model Name","Bitte Modelname eingeben")
    $Datum = @YEAR &"-"& @MON &"-"& @MDAY
    $Verzeichnis = "\\192.168.178.200\zb-models\" & $Datum &" "& $input1
    $Verzeichnis2 = $Verzeichnis & "\" & $Datum &" "& $input1 &" bearbeitet"
    ;$input1=FileSelectFolder( "Bitte Vereichnis auswählen", "\\192.168.178.200\zb-models")
    DirCreate ($Verzeichnis2)

    local $arFiles[UBound($arTmpFiles)],$count,$sDelimeter=";"
    for $i=0 to UBound($arTmpFiles)-1 step 1;Durch alles einträge laufen
    $result=StringRegExp($arTmpFiles[$i],"\d*"&$sDelimeter&"(?:.*?)"&$sDelimeter&"(.*?)"&$sDelimeter&"(\d*)"&$sDelimeter,1);Den Namen und den Stern auslesen
    ;$result=StringRegExp($arTmpFiles[$i],"\d*"&$sDelimeter&"(?:.*?)"&$sDelimeter&"(\d*)"&$sDelimeter,1);Den Namen und den Stern auslesen
    if Not @error then;Wenn gefunden
    if $result[1]="1" then;Wenn Sterne=1
    $arFiles[$count]=$result[0];eintragen
    $count+=1;counter ist nur, um am ende die größe festzulegen und nicht funde somit zu filtern
    endif
    endif
    next
    ReDim $arFiles[$count]

    $arSearch=_findFilesWithString("s:\2017","\d{4}-SUN-(.*nef)")
    ;_ArrayDisplay($arFiles)
    ;_ArrayDisplay($arSearch)


    for $i=0 to UBound($arFiles)-1 step 1;arFiles durchlaufen
    $index=_ArraySearch($arSearch,$arFiles[$i]&".nef");Nach dem Dateinamen suchen
    if $index>-1 then;Wenn gefunden ausgeben
    ConsoleWrite($arFiles[$i]&" -> "&$arSearch[$index][0]&@crlf)
    FileCopy($arSearch[$index][0],$Verzeichnis&"\"&$arSearch[$index][1])

    ;MsgBox(0,"Ergebnis", $Verzeichnis2 & " Punkte")

    endif
    next
    Func _findFilesWithString($path,$pattern)
    ;ConsoleWrite("Searching: "&$path&@crlf)
    $hSearch=FileFindFirstFile($path&"\*");Suche starten
    local $arResult[0][2];Array erstellen
    if $hSearch<>-1 then
    While 1
    $sFileName = FileFindNextFile($hSearch);Datei suchen
    If @error Then ExitLoop
    if @extended then
    $arTmp=_findFilesWithString($path&"\"&$sFileName,$pattern);Unterordner durchsuchen
    if UBound($arTmp)>0 then;Bei Fund
    ReDim $arResult[UBound($arResult)+UBound($arTmp)][2];Array vergrößern
    for $i=0 to UBound($arTmp)-1 step 1;und die Gefudnenen Dateien hinzufügen
    $arResult[UBound($arResult)+$i-UBound($arTmp)][0]=$arTmp[$i][0]
    $arResult[UBound($arResult)+$i-UBound($arTmp)][1]=$arTmp[$i][1]
    next
    endif
    else
    ;if StringRegExp($path&"\"&$sFileName,$pattern,0) then;Dafür den gesamten Pfad im RegExp beachten
    if StringRegExp($sFileName,$pattern,0) then;Wenn die Datei dem Pattern entspricht
    ReDim $arResult[UBound($arResult)+1][2];Array vergrößern
    $arResult[UBound($arResult)-1][0]=$path&"\"&$sFileName;Datei reinschreiben
    $arResult[UBound($arResult)-1][1]=$sFileName;Datei reinschreiben
    endif
    endif
    WEnd
    endif
    return $arResult

    EndFunc
    MsgBox( 0, "Dateien kopieren","Kopieren abgeschlossen")

  • $arSearch=_findFilesWithString("s:\2017","\d{4}-SUN-(.*nef)")

    Hallo Dreamworker es ist die von mir zitierte Zeile die nach Dateien mit Endung *nef sucht.
    Du wirst dich auf diesen Teil konzentrieren müssen: "\d{4}-SUN-(.*nef)")
    Vielleicht mal "\d{4}-SUN-(.*nef)") durch "_SUN-(.*nef)") ersezten und mal schauen was passiert.
    Dies müsste dann nur die Dateien nehmen die anderst (rum) beschriftet sind.


    Um es den anderen im Forum leichter zu machen verwende bei Code bitte die Code Funktion.
    Diese findest du im Editor ganz rechts und sieht so aus: </>
    Danach in der Syntax Hervorhebung Autoit anwählen :D

    Edit:
    Die Dateien sind auch anderst aufgebaut:
    2017-SUN-10743.nef
    _SUN1409.nef

    mfg Ru642

    3 Mal editiert, zuletzt von ru642 (17. August 2017 um 16:58)

  • Hallo @Dreamworker
    eigentlich ist so ein strikter Filter doch gar nicht notwendig. Die gefundenen Dateien werden doch eh mit den Dateinamen aus deiner Liste abgeglichen..
    Ändere doch einfach die Zeile :

    AutoIt
    $arSearch=_findFilesWithString("s:\2017","\d{4}-SUN-(.*nef)")

    zu

    AutoIt
    $arSearch=_findFilesWithString("s:\2017",".nef")

    Grüße autoiter

  • Hallo zusammen,
    ich habe mal versucht, klappt leider nicht.

    $arSearch=_findFilesWithString("s:\2017",".nef") oder auch $arSearch=_findFilesWithString("s:\2017",".nef") zu nutzen , beides geht nicht.

    Das Programm hat ja folgende Funktion, es liest die Bildnamen ein die mit einem Stern gekennzeichnet sind aus der Datei Test.csv.
    Danach kopiert er die Dateien .

  • Hallo zusammen,
    ich habe mal versucht, klappt leider nicht.

    $arSearch=_findFilesWithString("s:\2017",".nef") oder auch $arSearch=_findFilesWithString("s:\2017",".nef") zu nutzen , beides geht nicht.

    Das Programm hat ja folgende Funktion, es liest die Bildnamen ein die mit einem Stern gekennzeichnet sind aus der Datei Test.csv.
    Danach kopiert er die Dateien .

    Mir ist aufgefallen das du in beiden Fällen den * nicht verwendet hast. $arSearch=_findFilesWithString("s:\2017",".*nef") oder auch $arSearch=_findFilesWithString("s:\2017",".*nef")