Probleme mit FileCopy

  • Hallo ich habe da ein Problem

    ich traue es mich ja fast nicht zu fragen, aber .... ich hab schon gesucht und nichts gefunden.

    unter Dos gibt es den Befehl copy *.* c:\Logfile.log
    d.h alle Dateien im aktuellen verzeichznis werden in ein Logfile kopiert.

    Mit dem Befehl FileCopy("c:\Log\*.*","c:\log\logfile.log",1) wird nur die letzte Datei im Verzeichnis in das Logfile kopiert.
    Ist das ein BUG ? Oder stelle ich mich zublöd an. Gibt es eine einfache Lösung für das Problem, ohne ein cmd Fenster zu öffnen ?
    Gruß mm4040

    Einmal editiert, zuletzt von mm4040 (16. August 2009 um 11:19)

  • hm,
    ich glaube wir haben aneinander vorbei geredet.
    Es sollen alle Dateine(z.B txt oder log Dateien) in ein gesamtes Logfile(nicht Verzeichnis) copiert werden. Aus 50 Dateine wird dann nur noch eine Datei.
    Zu mindest unter Dos.

  • ja genau,

    so wie unter Dos -> da gibt es den Befehl copy *.* c:\Logfile.log
    So was simples muss es doch auch geben ? ;(
    Das Logfile will später nach Meldungen durchsuchen, und da ich nicht hundertes Files einzeln aufmachen möchte, copier ich den Inhalt aller 100 Datein einfach ein eine Datei

  • Achso Meinst du das, Dann geht es So:

    Spoiler anzeigen
    [autoit]


    $SearchHandle = FileFindFirstFile("*.log;*.txt")

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

    While 1
    $Filename = FileFindNextFile($SearchHandle)
    $FileContent &= FileRead($Filename) & @CRLF
    If @Error Then ExitLoop
    WEnd

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

    FileWriteLine("Zusammenfassung.txt", $FileContent)

    [/autoit]

    Ich weis nicht ob es klappt, musst du mal Versuchen

    Mfg DjD

  • Hallo,
    es gibt mehrere Möglichkeiten:
    - das DOS-Copy

    [autoit]

    Run(@ComSpec & " /c copy *.* >log.txt", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

    [/autoit]


    - Auslesen per AutoIt

    Spoiler anzeigen
    [autoit]

    ; Zeigt die Dateinamen aller Dateien im aktuellen Verzeichnis an.
    $search = FileFindFirstFile("*.*")

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

    ; Prüfen, ob die Suche erfolgreich war
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf

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

    $logfile="log.txt"

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

    fileopen($logfile,2) ;Dateiinhalt überschreiben
    While 1
    $file = FileFindNextFile($search) ;dateinamen lesen
    If @error Then ExitLoop ;wenn der letzte erreicht, loop verlassen
    filewriteline($logfile,$file) ; dateinamen ins log schreiben
    WEnd

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

    ; Handle für Suche schliessen
    FileClose($search)
    FileClose($logfile)

    [/autoit]
    • Offizieller Beitrag

    Oder per Objekt :)

    [autoit]

    Local $Path = @ScriptDir ; dein Ordner
    Local $sFilter = "txt log"
    Local $Log = @ScriptDir & '\Logfile.log' ; deine Ausgabe Logdatei
    Local $oFSO = ObjCreate('Scripting.FileSystemObject')
    If $oFSO.FolderExists($Path) Then
    Local $oFolder = $oFSO.GetFolder($Path)
    Else
    Exit MsgBox(0, 'ACHTUNG!', 'Ordner: "' & $Path & '", existiert nicht. Referenz wurde nicht erstellt.')
    EndIf
    Local $name, $ext, $sOut = '', $oFiles = $oFolder.Files
    For $file In $oFiles
    $name = $file.Name & @CRLF
    $ext = StringRight(StringStripWS($name, 2), 3)
    If StringInStr($sFilter, $ext) Then
    $sOut &= $name & @CRLF & FileRead($file.Path) & @CRLF
    EndIf
    Next
    FileWrite($Log, $sOut)

    [/autoit]
  • BugFix
    oder per dll-call, würde auch sehr gut zu deinem Tutorial passen ^^

  • Hallo Zusammen,

    ich war gerade ein wenig überfordert mit soviel Antworten hatte ich nicht gerade gerechnet.
    Nach dem ich alle ausprobiert habe, konnte ich nur eine Richtige Lösung finden.
    Mein Dank gilt allen und besonders dem "Bug Fixer".
    Hier werden alle Inhalte der Dateien wirklich in nur eine Datei geschrieben

    Probelm gelöst. Der Sonntag ist gerettet.
    Gruss mm4040 :thumbup: