1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 11. Juni 2010 um 19:47

    Meinst Du so:

    [autoit]


    #include <File.au3>
    $aFiles = _FileListToArray(@TempDir & "\Backup", '*.zip', 1)

    [/autoit]
  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 11. Juni 2010 um 19:13

    Was willst Du denn mit den Archiven machen?
    Das Array $aDirs enthält alle Unterordner von 'c:\beispiel\test\'. Kopiert und gepackt werden aber nur die, die auch die zwei Textdateien enthalten. Demzufolge könnte es sein, dass es einige Archive mit $aDirs[x] nicht gibt.
    Je nachdem, was Du vorhast, würde es sich vielleicht anbieten, die ZIP-Archive in ein eigenes Array einlesen zu lassen.

  • Labels teilweise unterstreichen: _GuiCtrlCreateLabel_UnderlineWords

    • Oscar
    • 11. Juni 2010 um 16:15

    Das sieht auf jeden Fall schon sehr gut aus. :thumbup:
    Gleich mal in mein Archiv aufnehmen...

  • Desktop Wetter

    • Oscar
    • 11. Juni 2010 um 07:49
    Zitat

    Kann ein Mod das vll ins Projekte Forum verschieben :)
    Wird ja ein Projekt , was ich immer verbessere !

    Ich hab's nach Projekte verschoben.

  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 11. Juni 2010 um 00:40

    Doch, AutoBert hat recht. Die Funktion von BugFix kann auch ganze Verzeichnisse packen. Da habe ich mich geirrt (Sorry, BugFix).

    Ich habe die Funktion mal in mein Beispiel eingebunden:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>

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

    $sPath = 'c:\beispiel\test\'
    $sFile1 = 'datei1.txt'
    $sFile2 = 'datei2.txt'
    $aDirs = _FileListToArray($sPath, '*', 2) ; das Array $aDirs enthält die Namen der Unterverzeichnisse von $sPath
    If Not @error Then
    For $i = 1 To $aDirs[0] ; alle gefundenen Unterverzeichnisse durchgehen
    If FileExists($sPath & $aDirs[$i] & '\' & $sFile1) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile1, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren
    If FileExists($sPath & $aDirs[$i] & '\' & $sFile2) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile2, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren
    If FileExists(@TempDir & '\' & $aDirs[$i]) Then _BuildInZIP(@TempDir & '\' & $aDirs[$i] & '.zip', @TempDir & '\' & $aDirs[$i] & '\')
    Next
    EndIf

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

    ;===============================================================================
    ; Function Name: _BuildInZIP($sPath, $s_a_ToZip, $fUnZip=True, $iIndexBase=1, $fOverwrite=True)
    ; Description: Erstellt aus einer Datei od. einem Array von Dateien eine ZIP-Datei
    ; mit Hilfe der Windows eigenen ZIP-Funktion
    ; Parameter(s): $sPath Pfad der zu erstellenden ZIP-Datei // Bestehenden ZIP-Datei
    ; $s_a_ToZip String der Einzeldatei oder Array der zu zippenden Dateien
    ; // Pfad des Zielordners, in den entpackt werden soll
    ; $fUnZip=True Entpacken=True, Packen=False (Standard)
    ; $iIndexBase Index Basis (erstes Element mit Pfad) des übergebenen Arrays (0 od.1)
    ; $fOverwrite Falls $sPath existiert ==> Überschreiben (Standard=True)
    ; Return Value(s): Erfolg 1
    ; Fehler set @error 1 - Überschreiben aus, aber Zieldatei existiert
    ; 2 - Zieldatei endet nicht auf ".zip"
    ; 3 - zu komprimierende Datei existiert nicht
    ; @extended: Anzahl der fehlenden Dateien
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _BuildInZIP($sPath, $s_a_ToZip, $fUnZip=False, $iIndexBase=1, $fOverwrite=True)
    Local $fh, $sNul = '', $sZIPHeader, $objShell = ObjCreate("Shell.Application"), $objZipOrdner, $err = 0
    $sPath = FileGetLongName($sPath, 1)
    If $fUnZip Then
    Local $temp, $objZip
    If Not FileExists($s_a_ToZip) Then DirCreate($s_a_ToZip)
    $temp = $objShell.Namespace($s_a_ToZip)
    $objZip = $objShell.Namespace($sPath)
    $temp.CopyHere($objZip.Items)
    Return 1
    EndIf
    If (Not $fOverwrite) And FileExists($sPath) Then Return SetError(1,0,0)
    If StringRight($sPath, 4) <> '.zip' Then Return SetError(2,0,0)
    For $i = 1 To 18
    $sNul &= Chr(0)
    Next
    $sZIPHeader = Chr(80) & Chr(75) & Chr(5) & Chr(6) & $sNul
    $fh = FileOpen($sPath, 10)
    FileWrite($fh, $sZIPHeader)
    FileClose($fh)
    $objZipOrdner = $objShell.Namespace($sPath)
    If Not IsArray($s_a_ToZip) Then
    If Not FileExists($s_a_ToZip) Then Return SetError(3,1,0)
    $objZipOrdner.CopyHere($s_a_ToZip)
    Sleep(1000)
    Return 1
    EndIf
    For $i = $iIndexBase To UBound($s_a_ToZip) -1
    If Not FileExists($s_a_ToZip[$i]) Then
    $err += 1
    ContinueLoop
    EndIf
    $objZipOrdner.CopyHere($s_a_ToZip[$i])
    Sleep(1000)
    Next
    If $err Then Return SetError(3,$err,0)
    Return 1
    EndFunc ;==>_BuildInZIP

    [/autoit]


    So brauchst Du dann auch die 7z.dll und 7z.exe nicht mehr.

  • Grafikfehler bei _GDIPlus_GraphicsFillRect

    • Oscar
    • 10. Juni 2010 um 20:40

    Vielleicht ein Bug in der GDI+ UDF?
    Auf jeden Fall funktioniert es mit dem doppelten Befehl, deshalb auch [gelöst]. :)

  • ZIP - Packen / Entpacken mit Windows eigener Funktion

    • Oscar
    • 10. Juni 2010 um 20:28

    _FileListToArray liefert nicht den kompletten Pfad der Dateien zurück, sondern nur die Datei-/Verzeichnisnamen.

  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 10. Juni 2010 um 19:37

    Ich glaube die Funktion von BugFix konnte nur Dateien packen, nicht ganze Verzeichnisse, oder?

    Na egal, ich habe Dir mal ein Skript geschrieben, dass 7zip zum packen verwendet (Anhang).

    Dateien

    KopierenUndPacken.zip 358,08 kB – 284 Downloads
  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 10. Juni 2010 um 18:49

    Ich hatte mal mit 7zip experimentiert. Das war nicht so kompliziert. Ich suche mal in meinem Archiv...
    Aber erstmal gibt's was zu essen... :D

  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 10. Juni 2010 um 18:24

    Copy & Paste Fehler. :D
    In Zeile 10 bei FileCopy muss $sFile2 (statt $sFile1) stehen.

    Mehrere Ordner werden aber bereits beachtet.

  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 10. Juni 2010 um 18:07

    Mist! Da waren noch ein paar kleine Fehler (man sollte das Skript auch testen). :rolleyes:

    So klappt es aber (getestet):

    Spoiler anzeigen
    [autoit]


    #include <File.au3>

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

    $sPath = 'c:\beispiel\test\'
    $sFile1 = 'datei1.txt'
    $sFile2 = 'datei2.txt'
    $aDirs = _FileListToArray($sPath, '*', 2) ; das Array $aDirs enthält die Namen der Unterverzeichnisse von $sPath
    If Not @error Then
    For $i = 1 To $aDirs[0] ; alle gefundenen Unterverzeichnisse durchgehen
    If FileExists($sPath & $aDirs[$i] & '\' & $sFile1) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile1, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren
    If FileExists($sPath & $aDirs[$i] & '\' & $sFile2) Then FileCopy($sPath & $aDirs[$i] & '\' & $sFile1, @TempDir & '\' & $aDirs[$i] & '\', 9) ; wenn die Datei existiert nach TempDir kopieren
    Next
    EndIf

    [/autoit]
  • Ordner aus einem Pfad ausfiltern und isolieren (batch umsetzung vorhanden)

    • Oscar
    • 10. Juni 2010 um 17:35

    Den Anfang würde ich so machen:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    $sPath = 'c:\beispiel\test\'
    $sFile1 = 'datei1.txt'
    $sFile2 = 'datei2.txt'
    $aDirs = _FileListToArray($sPath, '*', 2) ; das Array $aDirs enthält die Namen der Unterverzeichnisse von $sPath
    If Not @error Then
    For $i = 1 To $aDirs[0] ; alle gefundenen Unterverzeichnisse durchgehen
    If FileExists($sPath & $aDirs[$i] & '\' & $sFile1) Then FileCopy($sPath & $aDirs[$i] & $sFile1, @TempDir & $aDirs[$i] & '\' & $sFile1) ; wenn die Datei existiert nach TempDir kopieren
    If FileExists($sPath & $aDirs[$i] & '\' & $sFile2) Then FileCopy($sPath & $aDirs[$i] & $sFile1, @TempDir & $aDirs[$i] & '\' & $sFile2) ; wenn die Datei existiert nach TempDir kopieren
    Next
    EndIf

    [/autoit]
  • Grafikfehler bei _GDIPlus_GraphicsFillRect

    • Oscar
    • 10. Juni 2010 um 14:34

    Jetzt bin ich völlig verwirrt. :wacko:
    Ich habe diesen Befehl:

    [autoit]

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 50, 110, $iWidth, 44)

    [/autoit]

    einfach noch ein zweites Mal darunter geschrieben, sodass der jetzt zweimal identisch hintereinander steht:

    [autoit]


    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 50, 110, $iWidth, 44)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 50, 110, $iWidth, 44)

    [/autoit]


    und jetzt ist der Grafikfehler weg. ?(

    Edit:  Mahagon: Kannst Du bestätigen, dass der Grafikfehler mit der doppelten Zeile nicht mehr auftritt?

  • Grafikfehler bei _GDIPlus_GraphicsFillRect

    • Oscar
    • 10. Juni 2010 um 14:24

    Hab's jetzt auch mal auf meinem WindowsXP-Rechner (32 Bit) ausprobiert. Da tritt der Fehler auch nicht auf.
    Scheint an Win7 (64 Bit) zu liegen... ?(

  • Grafikfehler bei _GDIPlus_GraphicsFillRect

    • Oscar
    • 10. Juni 2010 um 14:14

    Das Skript ist bisher erstmal nur zur Grundlagen-Forschung. ;)

    Bei Dir tritt der Fehler nicht auf? Hast Du auch ganz genau hingeschaut? Das ist ja immer nur kurz zu erkennen.
    Aber wenn der wirklich nicht auftritt, würde mich mal Deine Konfiguration (Windows, 32 oder 64 Bit, AutoIt-Version) interessieren.

  • Grafikfehler bei _GDIPlus_GraphicsFillRect

    • Oscar
    • 10. Juni 2010 um 13:38

    Ich wollte mal etwas mit GDI+ und der BASS.dll rumspielen und habe ein Levelmeter erstellt. Dieses wird mit _GDIPlus_GraphicsFillRect gefüllt.
    Allerdings tritt dort ein kleiner Grafikfehler auf:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Und den kann ich mir eigentlich nicht erklären. Für den Screenshot musste ich einige Versuche unternehmen, weil der Fehler scheinbar nicht immer auftritt.
    Vielleicht hat ja einer von euch eine Erklärung dafür...

    Zum ausprobieren habe ich mal das Skript und die benötigten Bass-Dateien gepackt (Anhang).

    Dateien

    Grafikfehler.png 6,86 kB – 0 Downloads Levelmeter.zip 156,67 kB – 226 Downloads
  • Verschieben von GUI verhindern/ Position sperren

    • Oscar
    • 10. Juni 2010 um 12:04

    Vielleicht so:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>

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

    $left = 600
    $top = 300
    $hGui = GUICreate('Test', 200, 100, $left, $top)
    GUISetState()
    GUIRegisterMsg($WM_MOVE, 'WM_MOVE')

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

    Do
    Until GUIGetMsg() = -3

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

    Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
    WinMove($hGui, '', $left, $top)
    EndFunc

    [/autoit]
  • Scite Fehlermeldungen ohne ende

    • Oscar
    • 10. Juni 2010 um 09:07

    Nicht gleich so aufbrausend werden.
    Es könnte passieren und genau deswegen gibt es diese Warnmeldungen. Wie Du bemerkt hast, funktioniert Dein Skript trotzdem (nach ignorieren der Warnmeldungen), aber es ist ein schlechter Programmierstil (da hat Dax schon recht).

  • Scite Fehlermeldungen ohne ende

    • Oscar
    • 10. Juni 2010 um 06:51

    War das nicht schon immer so? Kann mich jetzt nicht erinnern...
    Wenn Dir das im Hauptprogramm zu unübersichtlich wird, kannst Du die Variablendeklaration auch in einer extra au3-Datei machen und diese dann in Deinem Programm includen.
    Man könnte sich dafür auch ein Skript schreiben... ;)

  • Scite Fehlermeldungen ohne ende

    • Oscar
    • 10. Juni 2010 um 06:35

    Globale Variablen musst Du auch Global (im Hauptprogramm) deklarieren und nicht in einer Funktion.
    Das sollen Dir diese Warnmeldungen sagen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™