PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche eine Sync-Lösung


blackbox
2023-07-06, 16:20:04
Moin,
ich suche eine Lösung, um 2 Ordner zu synchronisieren.

- Es geht darum, dass sobald im Quellordner eine Datei erstellt wird, diese sofort zum Zielordner kopiert wird.
- jetzt kommt das Aber: im Zielordner werden die Dateien nach der Bearbeitung verschoben, so dass kein Abgleich Quellordner<>Zielordner erfolgen kann
- der Abgleich muss also mit dem Quellordner selbst erfolgen, es muss also ein Log erstellt werden, woran die Software/Script erkennen kann, ob eine Datei schon kopiert wurde

Wer hat hier einen Tip?

Cubitus
2023-07-06, 16:46:45
Hast du eine bevorzugte Programmiersprache, in der das Skript geschrieben werden soll?

Wie genau werden die Dateien im Zielordner nach der Bearbeitung verschoben?

Werden sie in Unterordner verschoben oder an einen völlig anderen Ort?

Soll das Skript automatisch im Hintergrund laufen, oder möchtest du es manuell starten?

Gibt es bestimmte Dateitypen, die synchronisiert werden sollen, oder sollen alle Dateien berücksichtigt werden?

blackbox
2023-07-07, 10:45:00
- Ich habe keine bevorzugte Programmiersprache, es soll auf einem normalen Windows 10 Rechner laufen
- Sie werden in einem Unterordner verschoben
- Programm soll autonom laufen
- es sollen nur xml Dateien kopiert werden

Gast
2023-07-07, 10:49:44
- Ich habe keine bevorzugte Programmiersprache, es soll auf einem normalen Windows 10 Rechner laufen
- Sie werden in einem Unterordner verschoben
- Programm soll autonom laufen
- es sollen nur xml Dateien kopiert werden
Letzter wichtiger Punkt ist dann eigentlich nur ob die Dateien umbenannt werden oder in den Unterordnern das selbe Bemennungsformat nutzen? Dann kann man einfach die Unterornder checken, ob es die Files dort schon gibt. Macht's deutlich einfacher als ein Log.

Cubitus
2023-07-07, 11:07:04
Okay, ich hab mal ChatGPT der Version 4 bemüht und einen Prompt erstellt:
Deine Anforderung eignet sich gut dafür:)

Du kannst die Anforderungen jeder Zeit anpassen, geht auch gut mit der freien Version 3.5

Erstmal der Prompt Creator den du in einem Extra-Chat laufen lassen kannst:

"Ich möchte, dass du mein Prompt Creator wirst. Dein Ziel ist es, mir zu helfen, den bestmöglichen Prompt für meine Bedürfnisse zu erstellen. Der Prompt wird von dir, ChatGPT, verwendet. Du wirst den folgenden Prozess befolgen:

1. Als erstes fragst du mich, worum es in dem Prompt gehen soll. Ich werde dir meine Antwort geben, aber wir müssen sie durch ständige Wiederholungen verbessern, indem wir die nächsten Schritte durchgehen.
2. Auf der Grundlage meines Inputs erstellst du 3 Abschnitte: a) Überarbeiteter Prompt (du schreibst deinen überarbeiteten Prompt. Er sollte klar, präzise und für dich leicht verständlich sein), b) Vorschläge (du machst Vorschläge, welche Details du in den Prompt einbauen solltest, um ihn zu verbessern) und c) Fragen (du stellst relevante Fragen dazu, welche zusätzlichen Informationen ich brauche, um den Prompt zu verbessern).
3. Der Prompt, den du bereitstellst, sollte die Form einer Anfrage von mir haben, die von ChatGPT ausgeführt werden soll.
4. Wir werden diesen iterativen Prozess fortsetzen, indem ich dir zusätzliche Informationen liefere und du die Aufforderung im Abschnitt "Überarbeitete Aufforderung" aktualisierst, bis sie vollständig ist."

Dann habe ich mit deinen Infos mal random einen Case erstellt:

"ChatGPT, ich benötige eine automatisierte Lösung für einen Windows 10 Computer, die zwei Ordner synchronisiert, indem sie nur XML-Dateien kopiert. Wenn im Quellordner eine neue XML-Datei erstellt wird, sollte sie sofort in den Zielordner kopiert werden. Die Dateien im Zielordner werden nach der Bearbeitung in einen Unterordner verschoben. Die Lösung sollte ein Log verwenden, um zu verfolgen, welche Dateien bereits kopiert wurden, einschließlich des ursprünglichen Namens und des Erstellungsdatums der Datei. Das Programm sollte im Hintergrund laufen, ohne dass ich es manuell starten muss, und sollte den Quellordner alle 60 Sekunden auf neue XML-Dateien überprüfen. Das Log sollte auch Informationen über Fehler beim Kopieren enthalten. Wenn die Größe des Logs 50 MB übersteigt, sollte ein neues Log erstellt werden, wobei ein Zeitstempel an den Dateinamen angehängt wird. Die Logs sollten nicht automatisch gelöscht werden und müssen im Verzeichnis C:\Temp gespeichert werden. Kannst du mir bei der Erstellung eines Skripts helfen oder eine bestehende Software empfehlen, die diese Aufgabe erfüllen kann?"

Es gibt verschiedene Ansätze, um diese Anforderungen zu erfüllen. Man könnte eine bestehende Software verwenden, wie beispielsweise FreeFileSync oder Microsofts SyncToy, aber diese könnten möglicherweise nicht alle spezifischen Anforderungen erfüllen, die du beschrieben hast.

Alternativ könnte man ein benutzerdefiniertes Skript schreiben, das im Hintergrund läuft. Hier zeige ich dir ein einfaches PowerShell-Skript als Ausgangspunkt, das du entsprechend anpassen kannst. Beachte, dass dieses Skript nur ein Grundgerüst ist und möglicherweise erweitert und angepasst werden muss, um alle Anforderungen zu erfüllen.

$source = 'C:\Quellordner'
$destination = 'C:\Zielordner'
$logDirectory = 'C:\Temp'
$logFile = Join-Path $logDirectory 'sync.log'

while ($true) {
try {
# Überprüfe, ob das Log-Verzeichnis existiert, ansonsten erstelle es.
if (-not (Test-Path $logDirectory)) {
New-Item -ItemType Directory -Force -Path $logDirectory
}

# Prüfe Log-Größe und erstelle ggf. neues Log
if (Test-Path $logFile -and ((Get-Item $logFile).Length -gt 50MB)) {
$newLogName = "sync_{0}.log" -f (Get-Date).ToString('yyyyMMdd_HHmmss')
Rename-Item $logFile (Join-Path $logDirectory $newLogName)
}

# Suche nach XML-Dateien im Quellordner
$xmlFiles = Get-ChildItem $source -Filter "*.xml"

# Kopiere XML-Dateien in den Zielordner
foreach ($file in $xmlFiles) {
$destinationFile = Join-Path $destination $file.Name
Copy-Item $file.FullName $destinationFile
$logEntry = "{0} - {1} kopiert nach {2}" -f (Get-Date), $file.FullName, $destinationFile
$logEntry | Out-File $logFile -Append
}
} catch {
# Logge Fehler
$errorEntry = "{0} - Fehler: {1}" -f (Get-Date), $_.Exception.Message
$errorEntry | Out-File $logFile -Append
}

# Warte 60 Sekunden
Start-Sleep -Seconds 60
}

blackbox
2023-07-08, 09:48:19
Interessanter Ansatz. Werde ich mal testen.

Darkman.X
2023-07-08, 14:50:11
hmm......die Anforderungen vom Startpost könnte man simpel per Batch umsetzen. Man muss da auch nicht mit einem Log arbeiten oder Dateien im Unterordner abgleichen: Dafür gibt es schon seit MS-DOS-Zeiten das "Archive"-Attribut. Einfach mit XCOPY oder ROBOCOPY nur Dateien mit gesetzten Archiv-Attribut vom Quellordner kopieren und das Attribut löschen lassen (beide Befehle haben einen Parameter dafür). So werden ausschließlich neue oder geänderte Dateien kopiert.

Irgendwer (oder ChatGPT) kann dafür bestimmt auch ein schönes Powershell-Script schreiben. Aber es gibt sicherlich auch ein grafisches Sync-/Kopier-Tool, das die Anforderungen umsetzen kann....

Darkman.X
2023-07-08, 14:51:06
ups, Doppelpost. Bitte löschen.