Hallo Leute
Habe mir ein Programm geschrieben, welches den Kopiervorgang erleichtert (vor allem wenn man mit mehreren und größeren Paketen kopiert).
Dieser Manager erlaubt es euch eine Liste zu erstellen. Diese Liste wird vom Programm abgearbeitet und eins nach dem anderen kopiert.
Sicher ist er noch nicht ganz ausgereift, aber grob funktioniert er schonmal.
Allgemein höre ich sehr gerne eure Meinungen dazu und noch lieber Verbesserungsvorschläge und Hilfen (Vor allem bei der verbesserten Dateiauswahl)!!
AutoIT v3 Skript:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
#Include <GuiListView.au3>
Global $Title = "Copy Manager"
Dim $LVItem[1000]
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate($Title, 636, 613, 442, 65)
$Group1 = GUICtrlCreateGroup("Auswahl:", 8, 8, 617, 161)
$Label1 = GUICtrlCreateLabel("Zu kopierende Dateien/Ordner wählen:", 24, 32, 190, 17)
$Input1 = GUICtrlCreateInput("", 24, 56, 193, 21)
$Button1 = GUICtrlCreateButton("Durchsuchen", 224, 56, 84, 22, $BS_FLAT)
$Label2 = GUICtrlCreateLabel("Zielverzeichnis wählen:", 328, 32, 114, 17)
$Input2 = GUICtrlCreateInput("", 328, 56, 193, 21)
$Button2 = GUICtrlCreateButton("Durchsuchen", 528, 56, 84, 22, $BS_FLAT)
$Checkbox1 = GUICtrlCreateCheckbox("Dateien/Ordner nach Kopiervorgang löschen (Verschieben)", 32, 96, 249, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Nach Kopiervorgang herunterfahren", 32, 112, 209, 25)
$Button3 = GUICtrlCreateButton("Hinzufügen", 408, 128, 100, 30, $BS_FLAT)
$Button4 = GUICtrlCreateButton("Starten", 512, 128, 100, 30, $BS_FLAT)
$Label4 = GUICtrlCreateLabel("", 32, 144, 137, 17)
$Button7 = GUICtrlCreateButton("Liste laden...", 288, 88, 100, 22, $BS_FLAT)
$Label5 = GUICtrlCreateLabel("Format: *.txt ->", 400, 88, 72, 17)
$Label6 = GUICtrlCreateLabel("Quellpfad|Zielpfad", 472, 88, 89, 17)
$Label7 = GUICtrlCreateLabel("Quellpfad|Zielpfad", 472, 112, 89, 17)
$Button8 = GUICtrlCreateButton("Liste speichern...", 288, 112, 100, 22, $BS_FLAT)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$ListView1 = GUICtrlCreateListView("", 8, 176, 617, 401)
_GUICtrlListView_AddColumn($ListView1, "Nr.", 35)
_GUICtrlListView_AddColumn($ListView1, "Quellordner", 200)
_GUICtrlListView_AddColumn($ListView1, "Zielordner", 200)
_GUICtrlListView_AddColumn($ListView1, "Status", 200)
$Button5 = GUICtrlCreateButton("Auswahl aus Liste entfernen", 16, 584, 156, 22, $BS_FLAT)
$Button6 = GUICtrlCreateButton("Beenden", 184, 584, 100, 22, $BS_FLAT)
$Label3 = GUICtrlCreateLabel("(Beendet das Programm, alle Änderungen gehen verloren!!!)", 288, 584, 286, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$SourcePath = FileSelectFolder("Ordner auswählen", "", 1, "", $Form1)
if @error = 1 Then
MsgBox(48, "Fehler", "Sie haben keine Dateien ausgewählt")
EndIf
GUICtrlSetData($Input1, $SourcePath)
Case $Button2
$TargetPath = FileSelectFolder ( "Zielverzeichnis auswählen:", "", 1, "", $Form1)
if @error = 1 Then
MsgBox(48, "Fehler", "Sie haben keine Dateien ausgewählt")
EndIf
GUICtrlSetData($Input2, $TargetPath)
Case $Button3
_AddToList()
Case $Button4
if FileExists(GUICtrlRead($Input1)) and FileExists(GUICtrlRead($Input1)) then
_AddToList()
endif
_CopySelected()
Case $Button5
$ItemSelected = _GUICtrlListView_GetSelectionMark($ListView1)
_GUICtrlListView_DeleteItemsSelected($ListView1)
_ArrayDelete($LVItem, $ItemSelected)
_RefreshNR()
ReDim $LVItem[1000]
Case $Button6
Exit
Case $Button7
_LoadList()
Case $Button8
_SaveList()
EndSwitch
WEnd
func _AddToList()
$Source = GUICtrlRead($Input1)
$Target = GUICtrlRead($Input2)
If FileExists($Source) = 0 then
MsgBox(48, "Fehler", $Source&" ist kein gültiger Dateipfad")
Return
EndIf
if FileExists($Target) = 0 then
MsgBox(48, "Fehler", $Target&" ist kein gültiger Dateipfad")
Return
endif
GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
$ItemCount = _GUICtrlListView_GetItemCount($ListView1)
$LVItem[$ItemCount] = GUICtrlCreateListViewItem($ItemCount + 1&"|"&$Source&"|"&$Target&"|Warte", $ListView1)
endfunc
func _CopySelected()
For $i = 0 to _GUICtrlListView_GetItemCount($ListView1) - 1
$ItemContent = _GUICtrlListView_GetItemTextArray($ListView1, $i)
$copySource = $ItemContent[2]
$copyTarget = $ItemContent[3]
GUICtrlSetData($LVItem[$i], "|||Kopiere")
$identify = FileGetAttrib($copySource)
If StringInStr($identify, "D") = 0 then
if ControlCommand($Title, "", $Checkbox1, "IsChecked", "") = 1 Then
FileMove($copySource, $copyTarget)
else
FileCopy($copySource, $copyTarget)
endif
else
Runwait(@ComSpec & " /c " & "xcopy " & '"' & $copySource & '"' & ' "' & $copyTarget & '"' & " /E /C", @SystemDir, @SW_HIDE) ;DirCopy funzt nicht
if ControlCommand($Title, "", $Checkbox1, "IsChecked", "") = 1 Then
DirRemove($copySource, 1) ;DirMove funzt auch nich
endif
EndIf
if FileExists($copyTarget) = 0 Then
GUICtrlSetData($LVItem[$i], "|||Fehler")
MsgBox(48, "Fehler", $copySource&" konnte nicht kopiert werden", 10)
else
GUICtrlSetData($LVItem[$i], "|||Abgeschlossen")
endif
Next
if ControlCommand($Title, "", $Checkbox2, "IsChecked", "") = 1 Then
Shutdown(1)
EndIf
MsgBox(0, "Fertig", "Kopiervorgang abgeschlossen!")
Return
endfunc
func _RefreshNR()
$Icount = _GUICtrlListView_GetItemCount($ListView1)
For $i = 0 to $Icount - 1
$aIcount = _GUICtrlListView_GetItemTextArray($ListView1, $i)
GUICtrlSetData($LVItem[$i], $i + 1&"|"&$aIcount[2]&"|"&$aIcount[3]&"|Warte")
Next
endfunc
func _LoadList()
$ListPath = FileOpenDialog ( "Bitte wählen sie die TXT-Datei mit der Liste aus:", @DesktopDir, "Textdateien (*.txt)" , 1, "", $Form1)
$ListCount = _FileCountLines($ListPath)
if @error = 1 Then
MsgBox(48, "Fehler", $ListPath&" konnte nicht geöffnet werden!")
Return
EndIf
$ListFile = FileOpen($ListPath)
if $ListFile = -1 Then
MsgBox(48, "Fehler", $ListPath&" konnte nicht geöffnet werden!")
Return
endif
For $i = 1 to $ListCount
$ListLine = FileReadLine($ListFile, $i)
$Paths = StringSplit($ListLine, "|")
if @error = 1 Then
MsgBox(48, "Fehler", $ListPath&' ist falsch formatiert! Bitte trennen sie die Pfade mit "|" [ALTGR + <] und beginnen sie jeden Kopierauftrag in einer neuen Zeile!')
Return
EndIf
$ItemCount = _GUICtrlListView_GetItemCount($ListView1)
$LVItem[$ItemCount] = GUICtrlCreateListViewItem($ItemCount + 1&"|"&$Paths[1]&"|"&$Paths[2]&"|Warte", $ListView1)
Next
FileClose($ListFile)
endfunc
func _SaveList()
$SListPath = FileSaveDialog("Wählen sie, wo ihre Liste gespeichert werden soll:", @DesktopDir, "Textdateien (*.txt)" , 0, "", $Form1)
_FileCreate($SListPath)
$SListFile = FileOpen($SListPath, 2)
For $i = 1 to _GUICtrlListView_GetItemCount($ListView1)
$SListItem = _GUICtrlListView_GetItemTextArray($ListView1, $i - 1)
FileWriteLine($SListFile, $SListItem[2]&"|"&$SListItem[3])
Next
FileCLose($SListFile)
endfunc
Updates:
Updates:
-Anzeige des Statusses der einzelnen Items
-Die Items lassen sich nun auch in einer formatierten TXT speichern
-Liste lässt sich jetzt auch per TXT Datei laden Wie die TXT-Datei formatiert sein muss, steht weiter unten!
-Fehlerkorrektur: Item-Nr. wurden nach dem Löschen eines Items nicht geupdatet! Fehler behoben!
-Fehlerkorrektur: Das Item Array wurde durch _ArrayDelete() gekürzt, jedoch nicht wieder aufgefüllt! Fehler behoben (thx@SEuBo)!
Was noch kommt:
Was noch kommt:
-Anzeige des Kopierfortschritts in Statusbar
-Bessere Datei/Ordnerauswahl (über TreeView z.B. einige Dateien wegmarkieren, die nicht kopiert werden sollen)
-Kontextmenüs mit wichtigen Informationen
-möglicherweise Fehlerkorrekturen? (bei mir klappt alles grad wunderbar!)
-Design
Formatierungsanleitung:
Formatierung der TXT-Dateien:
Bsp.(jeweils ohne die Zahl und ""):
1. Quellpfad|Zielpfad "C:\User\XXX\Desktop\Programme|C:\User\XXX\Desktop\TEST" (kopiert den Inhalt von "Programme" in den Ordner "TEST")
2. Quellpfad|Zielpfad "C:\User\XXX\Desktop\Docs\abcde.doc|C:\User\XXX\Desktop\TEST" (kopiert die Datei "abcde.doc" aus "Docs" in den "TEST" Ordner)
3. usw.
Ich bitte darum dieses Skript nur zum ausführen, lernen oder verbessern (damit ich was lerne xP) zu benutzen. Bitte nehmt zur Kenntnis das es moralisch verwerflich ist das Skript jemand anderes zu nehmen und es als eures auszugeben!
beste Grüße, sondaschuela69