Post by effel » 21 Jan 2018, 14:04
wunderbar, genau so war es gedacht. hut ab
Code: Select all
/*
thema: Dateien, die nicht in QuellArray eingetragen sind, werden separiert
https://autohotkey.com/boards/viewtopic.php?f=9&t=42881
danke just me
*/
#NoEnv
#SingleInstance Force
SetBatchLines, -1
; ---------------------------------------------------------------
#NoEnv
Gui, Add, Button, w350 gQuellPfad1, Meine Bilder
Gui, Add, Button, w350 gQuellPfad2, Neue Bilder
Gui, Add, Button, w350 gZielPfad, Verzeichnis Ziel
Gui, Add, Button, w350 gstart, Start
Gui, Add, Button, w350 gGuiClose, Programm beenden
Gui, Show, , Ordnerinhalt vergleichen
; ---------------------------------------------------------------
Return
GuiClose:
GuiEscape:
ExitApp
; ---------------------------------------------------------------
QuellPfad1:
FileSelectFolder, QuellPfad1, , 3, Verzeichnis auswählen
return
; ---------------------------------------------------------------
QuellPfad2:
FileSelectFolder, QuellPfad2, , 3, Verzeichnis auswählen
return
; ---------------------------------------------------------------
ZielPfad:
FileSelectFolder, ZielPfad, , 3, Verzeichnis auswählen
return
------------------------------------------------------------------------------------------------------------------------
start:
; --------------------------------------------------------------------------------------------------------------------------------
; Startpositionen für die späteren SubStr() Aufrufe, mit denen die QuellPfade aus den Pfaden entfernt werden
StartPos1 := StrLen(QuellPfad1) + 2 ; Länge QuellPfad + 1 für den abschließenden Backslash ("\") + 1
StartPos2 := StrLen(QuellPfad2) + 2
; --------------------------------------------------------------------------------------------------------------------------------
; Arrays
QuellArray := [] ; leeres Array für die Namen aus QuellPfad1 anlegen.
VerzArray := [] ; leeres Array für die neu zu erstellenden Verzeichnisse anlegen
; --------------------------------------------------------------------------------------------------------------------------------
; Zähler für kopierte Dateien
Zaehler := 0
; ================================================================================================================================
; Schleife über QuellPfad1 (kleines Verzeichnis) - Dateien in QuellArray eintragen
Loop, Files, %QuellPfad1%\*.*, FR
{
; Namen bilden
; Vom Verzeichnisnamen (A_LoopFileDir) wird nur der Teil nach dem Quellverzeichnis genommen
Verzeichnis := SubStr(A_LoopFileDir, StartPos1)
Datei := A_LoopFileName ; eigentlich überflüssig, nur zur Verdeutlichung
; Den Namen zusammensetzen
If (Verzeichnis <> "") ; wenn Verzeichnis nicht leer ist
Pfad := Verzeichnis . "\" . Datei
Else
Pfad := Datei
; Alternative Kurzfassung (ternary)
; Pfad := (Verzeichnis <> "" ? Verzeichnis . "\" : "") . Datei
; Namen als Schlüssel im Array speichern. Ein Wert wird nicht benötigt
QuellArray[Pfad] := ""
}
; ================================================================================================================================
; Schleife über QuellPfad2 (großes Verzeichnis) - Dateien, die nicht in QuellArray eingetragen sind, werden kopiert
Loop, Files, %QuellPfad2%\*.*, FR
{
; Namen bilden
; Vom Verzeichnisnamen (A_LoopFileDir) wird nur der Teil nach dem Quellverzeichnis genommen
Verzeichnis := SubStr(A_LoopFileDir, StartPos2)
Datei := A_LoopFileName ; eigentlich überflüssig, nur zur Verdeutlichung
; Den Namen zusammensetzen
If (Verzeichnis <> "") ; wenn Verzeichnis nicht leer ist
Pfad := Verzeichnis . "\" . Datei
Else
Pfad := Datei
; Alternative Kurzfassung (ternary)
; Pfad := (Verzeichnis <> "" ? Verzeichnis . "\" : "") . Datei
; Wenn der Name im QuellArray abgelegt ist, passiert nichts.
If QuellArray.HasKey(Pfad)
Continue
; Datei kopieren
; Prüfen, ob ein Unterverzeichnis erstellt werden muss
SplitPath, Pfad, Datei, Verzeichnis
; Wenn der Verzeichnisname noch nicht in VerzArray eingetragen ist, Verzeichnis erstellen und eintragen
If (Verzeichnis <> "") && !VerzArray.HasKey(Verzeichnis) {
FileCreateDir, %ZielPfad%\%Verzeichnis%
VerzArray[Verzeichnis] := ""
}
; Datei kopieren
FileCopy, %QuellPfad2%\%Pfad%, %ZielPfad%\%Pfad%
Zaehler++
}
; ================================================================================================================================
soundbeep, 1000, 1000
MsgBox, 0, Fertig!, %Zaehler% Dateien wurden kopiert!
ExitApp
/*
ich kann nur wachsen wenn ich auf den schultern von riesen stehe
just me ist einer von den vielen riesen in diesem forum
vielen dank
*/
wunderbar, genau so war es gedacht. hut ab :-)
[code]
/*
thema: Dateien, die nicht in QuellArray eingetragen sind, werden separiert
https://autohotkey.com/boards/viewtopic.php?f=9&t=42881
danke just me
*/
#NoEnv
#SingleInstance Force
SetBatchLines, -1
; ---------------------------------------------------------------
#NoEnv
Gui, Add, Button, w350 gQuellPfad1, Meine Bilder
Gui, Add, Button, w350 gQuellPfad2, Neue Bilder
Gui, Add, Button, w350 gZielPfad, Verzeichnis Ziel
Gui, Add, Button, w350 gstart, Start
Gui, Add, Button, w350 gGuiClose, Programm beenden
Gui, Show, , Ordnerinhalt vergleichen
; ---------------------------------------------------------------
Return
GuiClose:
GuiEscape:
ExitApp
; ---------------------------------------------------------------
QuellPfad1:
FileSelectFolder, QuellPfad1, , 3, Verzeichnis auswählen
return
; ---------------------------------------------------------------
QuellPfad2:
FileSelectFolder, QuellPfad2, , 3, Verzeichnis auswählen
return
; ---------------------------------------------------------------
ZielPfad:
FileSelectFolder, ZielPfad, , 3, Verzeichnis auswählen
return
------------------------------------------------------------------------------------------------------------------------
start:
; --------------------------------------------------------------------------------------------------------------------------------
; Startpositionen für die späteren SubStr() Aufrufe, mit denen die QuellPfade aus den Pfaden entfernt werden
StartPos1 := StrLen(QuellPfad1) + 2 ; Länge QuellPfad + 1 für den abschließenden Backslash ("\") + 1
StartPos2 := StrLen(QuellPfad2) + 2
; --------------------------------------------------------------------------------------------------------------------------------
; Arrays
QuellArray := [] ; leeres Array für die Namen aus QuellPfad1 anlegen.
VerzArray := [] ; leeres Array für die neu zu erstellenden Verzeichnisse anlegen
; --------------------------------------------------------------------------------------------------------------------------------
; Zähler für kopierte Dateien
Zaehler := 0
; ================================================================================================================================
; Schleife über QuellPfad1 (kleines Verzeichnis) - Dateien in QuellArray eintragen
Loop, Files, %QuellPfad1%\*.*, FR
{
; Namen bilden
; Vom Verzeichnisnamen (A_LoopFileDir) wird nur der Teil nach dem Quellverzeichnis genommen
Verzeichnis := SubStr(A_LoopFileDir, StartPos1)
Datei := A_LoopFileName ; eigentlich überflüssig, nur zur Verdeutlichung
; Den Namen zusammensetzen
If (Verzeichnis <> "") ; wenn Verzeichnis nicht leer ist
Pfad := Verzeichnis . "\" . Datei
Else
Pfad := Datei
; Alternative Kurzfassung (ternary)
; Pfad := (Verzeichnis <> "" ? Verzeichnis . "\" : "") . Datei
; Namen als Schlüssel im Array speichern. Ein Wert wird nicht benötigt
QuellArray[Pfad] := ""
}
; ================================================================================================================================
; Schleife über QuellPfad2 (großes Verzeichnis) - Dateien, die nicht in QuellArray eingetragen sind, werden kopiert
Loop, Files, %QuellPfad2%\*.*, FR
{
; Namen bilden
; Vom Verzeichnisnamen (A_LoopFileDir) wird nur der Teil nach dem Quellverzeichnis genommen
Verzeichnis := SubStr(A_LoopFileDir, StartPos2)
Datei := A_LoopFileName ; eigentlich überflüssig, nur zur Verdeutlichung
; Den Namen zusammensetzen
If (Verzeichnis <> "") ; wenn Verzeichnis nicht leer ist
Pfad := Verzeichnis . "\" . Datei
Else
Pfad := Datei
; Alternative Kurzfassung (ternary)
; Pfad := (Verzeichnis <> "" ? Verzeichnis . "\" : "") . Datei
; Wenn der Name im QuellArray abgelegt ist, passiert nichts.
If QuellArray.HasKey(Pfad)
Continue
; Datei kopieren
; Prüfen, ob ein Unterverzeichnis erstellt werden muss
SplitPath, Pfad, Datei, Verzeichnis
; Wenn der Verzeichnisname noch nicht in VerzArray eingetragen ist, Verzeichnis erstellen und eintragen
If (Verzeichnis <> "") && !VerzArray.HasKey(Verzeichnis) {
FileCreateDir, %ZielPfad%\%Verzeichnis%
VerzArray[Verzeichnis] := ""
}
; Datei kopieren
FileCopy, %QuellPfad2%\%Pfad%, %ZielPfad%\%Pfad%
Zaehler++
}
; ================================================================================================================================
soundbeep, 1000, 1000
MsgBox, 0, Fertig!, %Zaehler% Dateien wurden kopiert!
ExitApp
[/code]
/*
ich kann nur wachsen wenn ich auf den schultern von riesen stehe
just me ist einer von den vielen riesen in diesem forum :-) vielen dank
*/