Filecopy Problem

  • Hi,

    Hier mein Script,

    Problem ist das Filecopy keine Dateien in das Verzeichnis schreibt wenn schon welche drin sind die er überspringen müsste.

    Ist das normal das er die nicht überspringt?

    Spoiler anzeigen
    [autoit]


    ;Netzlaufwerk X: erstellen
    $netuseX = DriveMapAdd('X:','\\192.168.3.14\bmsbackup',0,'xxx','xxx')

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

    switch $netuseX
    ;Wenn neu verbunden
    case 1

    ;Erstelle BMSBackup
    DirCreate('C:\BMSBackup2')

    ;Kopiere Daten von X: auf D:\BMSBackup Flag 0 = Dateien nicht überschreiben
    FileCopy('X:\*.*','C:\BMSBackup2',0)
    sleep ( 5000 )
    ;Netzlaufwerk X: schließen
    DriveMapDel("X:")

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

    Exit
    ;Wenn Verbindung vorhanden
    case 0

    ;Überprüfe ob Datei vorhanden
    $realbms = FileExists('X:\bms*.*')
    switch $realbms

    ;Falsches Netzlaufwerk verbunden
    case 0
    Exit
    ;Richtiges Netzlaufwerk verbunden
    case 1

    ;Erstelle BMSBackup
    DirCreate('C:\BMSBackup2')

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

    ;Kopiere Daten von X: auf D:\BMSBackup Flag 0 = Dateien nicht überschreiben
    FileCopy('X:\*.*','C:\BMSBackup2',0)
    sleep ( 5000 )
    ;Netzlaufwerk X: schließen
    DriveMapDel("X:")

    Exit
    EndSwitch
    EndSwitch

    [/autoit]


    GtaSpider: Bitte benutz bei Codes die über 10 Zeilen sind den Spoiler

    Code
    [SPOILER][/SPOILER]

    Wird gemacht :)

    Einmal editiert, zuletzt von Kevinch (30. Juli 2007 um 14:48)

  • Hi bei mir funktioniert es einwandfrei.
    Der Ordner in den die Datei kopiert werden soll, enthält unterordner und Datein.

    Versuche doch mal:

    FileCopy("X:\*.*","C:\BMSBackup2\*.*",0)

    MfG
    Der_Doc

  • Zitat

    Original von Der_Doc
    Hi bei mir funktioniert es einwandfrei.
    Der Ordner in den die Datei kopiert werden soll, enthält unterordner und Datein.

    Versuche doch mal:

    FileCopy("X:\*.*","C:\BMSBackup2\*.*",0)

    MfG
    Der_Doc

    Leider geht es so auch nicht,
    nimm mal 40 Dateien, lösch davon die hinteren 15 oder 20 und versuchs nochmal.
    Wenn schon Dateien in dem Ordner sind, wo es hin soll, dann bricht er irgendwann einfach ab und kopiert nicht weiter. (er überschreibt, übergeht die Dateien wohl nicht)

  • Ich hab mal auf die Shoutbox Kommentare von GunFood gehört und mich an einem Array versucht.

    Hier das Ergebnis, sagt mir was ihr daran besser machen würdet.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include<Array.au3>
    #include<File.au3>

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

    $Path1 = 'C:\BMSBackup2\'
    $Path2 = 'X:\'

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

    ;Erstelle BMSBackup
    DirCreate('C:\BMSBackup2')

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

    ;Netzlaufwerk X: auf BMSBackup erstellen
    $netuseX = DriveMapAdd('X:','\\192.168.3.14\bmsbackup',0,'xxx','xxx')

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

    Switch $netuseX

    ; 0=vorhanden, 1=neu erstellt

    case 0

    $realX = FileExists($Path2&'*bms*.*')

    ; 0=Keine Dateien mit BMS vorhanden, 1=Daten mit BMS vorhanden

    Switch $realX

    case 0
    Exit

    case 1

    EndSwitch

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

    case 1


    EndSwitch

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

    $Filelist = _FileListToArray($Path2)
    $FilesInFolder = $Filelist[0]

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

    $arrayup = 1

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

    While 1

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

    $arraycount = $arrayup

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

    $check = FileExists($Path1&$Filelist[$arraycount])
    $check2 = FileExists($Path2&$Filelist[$arraycount])

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

    IF $check == $check2 Then

    EndIf

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

    If $check < $check2 Then

    FileCopy($Path2&$Filelist[$arraycount],$Path1,0)

    EndIf

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

    $arrayup = $arrayup + 1

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

    IF $Arrayup > $FilesInFolder Then

    DriveMapDel("X:")
    MsgBox(0,"","Fertisch")

    Exit

    EndIf

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

    WEnd

    [/autoit]
  • Wie gesagt ich hab das heute das erstemal versucht ;) bin gerne für eure Sachen offen :)

    Achso wenn dann schreib mir doch mal bitte wie :)

    Kurzes Edit: hab die Zählvariable noch geändert. weiss nicht was ich mir dabei gedacht hatte ^^ ;)

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include<Array.au3>
    #include<File.au3>

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

    $Path1 = 'C:\BMSBackup2\'
    $Path2 = 'X:\'

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

    ;Erstelle BMSBackup
    DirCreate('C:\BMSBackup2')

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

    ;Netzlaufwerk X: auf BMSBackup erstellen
    $netuseX = DriveMapAdd('X:','\\192.168.3.14\bmsbackup',0,'xxx','xxx')

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

    Switch $netuseX

    ; 0=vorhanden, 1=neu erstellt

    case 0

    $realX = FileExists($Path2&'*bms*.*')

    ; 0=Keine Dateien mit BMS vorhanden, 1=Daten mit BMS vorhanden

    Switch $realX

    case 0
    Exit

    case 1

    EndSwitch

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

    case 1


    EndSwitch

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

    $Filelist = _FileListToArray($Path2)
    $FilesInFolder = $Filelist[0]

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

    $arraycount = 1

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

    While 1

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

    $check = FileExists($Path1&$Filelist[$arraycount])
    $check2 = FileExists($Path2&$Filelist[$arraycount])

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

    IF $check == $check2 Then

    EndIf

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

    If $check < $check2 Then

    FileCopy($Path2&$Filelist[$arraycount],$Path1,0)

    EndIf

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

    $arraycount = $arraycount + 1

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

    IF $Arraycount > $FilesInFolder Then

    DriveMapDel("X:")
    MsgBox(0,"","Fertisch")

    Exit

    EndIf

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

    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Kevinch (30. Juli 2007 um 16:22)

  • Hi ich habe da nochmal eine frage.

    Was soll das Prog eigentlich genau machen?????
    Es wird ein BAckupordner angelegt und alle Dateien dort hinkopiert aber nicht überschrieben?

    Ist das so richtig?

    Wenn das nämlich so sein soll ist es zu schwer geschrieben.

    MfG
    Der_Doc

    Einmal editiert, zuletzt von Der_Doc (31. Juli 2007 um 11:42)

  • Wie würdest du es machen?

    weil die "nicht überschrieben funktion" geht so nicht ( die von Filecopy Flag0 )

  • Ja wie gesagt ich weis ja leider nicht wirklich wie das Programm funktioniert und was es macht.
    Poste doch mal eine Beschreibung und dann sehen wir weiter.

    Ich verstehe z.B. nicht was es mit deinem nicht überschreiben aufsich hat, soll die Datei dann einfach übersprungen werden oder ersetzt oder was??????

    Ich helfe ja gerne aber auf Ratespiele habe ich keine Lust.

    MfG
    Der_Doc

  • 1. Netzlaufwerk erstellen

    2. Überprüfen ob das Netzlaufwerk die Dateien mit *BMS*.* enthält

    3. Datei vom Netzlaufwerk mit den evtl. vorhanden Daten im Backupordner (lokal) vergleichen (bissher nur der Dateiname nicht die Größe

    4. Wenn die Daten vorhanden sind sollen sie nicht kopiert werden, wenn sie nicht vorhanden sind mit filecopy kopieren.

    5. Bei Ende der Kopieraktion Netzlaufwerk trennen und Skript beenden.


    Das ist grob der Ablauf, Email bei abbruch usw mach ich auch noch mit rein.... hatte nur heute noch keine Zeit...

    Was genau willst du denn noch wissen ?

  • Mh,
    also ich weis net aber ich habe jetzt die ganze Zeit getestet, bei mir funktioniert Filecopy. Ich habe das Script mal umgeschrieben und es läuft.
    Lese die Dateien aus dem Netzlaufwerk aus und kopiere sie nach C:\....

    Auch wenn die Dateien schon dort liegen, werden sie nicht überschrieben und kopiert werden nur die Dateien die BMS im Namen haben und nicht existieren.


    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <File.au3>

    $Path1 = "C:\BMSBackup2"
    $Path2 = "X:"

    ;Erstelle BMSBackup
    DirCreate("C:\BMSBackup2")

    $netuseX = DriveMapAdd($Path2,"\\192.168.3.14\bmsbackup",0,"xxx","xxx")

    IF $netuseX = 0 Then
    MsgBox (0,"Achtung", "Es ist folgender Fehler aufgeteten. @Errormeldung: " &@error)

    EndIf

    $search = FileFindFirstFile($Path2&"\bmsbackup\*bms*.*")

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

    If $search = -1 Then
    MsgBox(0, "Achtung", "Es wurde kein File gefunden!")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    FileCopy($Path2&"\bmsbackup\"&$file,$Path1,0)
    WEnd
    FileClose($search)

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

    DriveMapDel($Path2 )
    MsgBox(0, "So", "Fertig!")

    [/autoit]

    Teste mal den Quellcode.

    MfG
    Der_Doc

  • Das hat was mit $file = FileFindNextFile($search) zutun, so funktioniert es.

    Werd mal rumprobieren. :) danke schonmal

    Edit: wie du ja schon geschrieben hast, du schaust auch erst welche datei vorhanden ist und dann schreibst du erst die, die nicht da ist.

    Genau das macht mein anderes Skript ja auch. Nur mit einem Array :)

    Einmal editiert, zuletzt von Kevinch (31. Juli 2007 um 14:23)