knuefi
Goto Top

Verschieben von Dateien in mehren Ordner

Hallo und guten Tag zusammen,

ich bin auf der Suche nach einer zuverlässige Lösung, die Dateien von einen Ordner in zwei andere Ordner verschiebt. Hat jemand Erfahrung von euch?
Info: der Quell Ordner bekommt kontinuierlich neue Dateien, diese sollen (eventuell mit Zeitintervall) in zwei andere Ordner verschoben werden.
Macht es Sinn zu kopieren und anschließen den Inhalt vom Quell Ordner zu löschen?
Gruß

Content-ID: 388160

Url: https://administrator.de/forum/verschieben-von-dateien-in-mehren-ordner-388160.html

Ausgedruckt am: 22.12.2024 um 15:12 Uhr

Meierjo
Meierjo 30.09.2018 aktualisiert um 17:23:30 Uhr
Goto Top
Hallo

Mit dem Tool deiner Wahl (Copy, Xcopy, robocopy, …..) vom Quellordner in den 1. Zielordner kopieren, und dann vom Quellordner in den 2. Zielordner verschieben

Ungetestet:
@echo off
copy c:\Quelle\*.*  E:\Ziel1\
move c:\Quelle\*.*  E:\Ziel2\

Gruss
Penny.Cilin
Penny.Cilin 30.09.2018 um 17:25:44 Uhr
Goto Top
Hallo,

nimm dazu Robocopy. Die Syntax dazu kannst Du mit
robocopy /? | more
anzeigen lassen.
Du kannst zuerst die Daten kopieren und im zweiten Step nimmst den Paramter
/mov
oder
/move
.

Zudem kannst Du Dir das ganze auch in eine Log-Datei schreiben lassen.

Gruss Penny
rubberman
rubberman 30.09.2018 um 17:29:20 Uhr
Goto Top
Ist nicht so trivial. Wenn Dateien automatisch abgelegt werden, kann (und wird) es passieren dass die Datei schon angelegt ist, der Inhalt aber noch nicht fertig geschrieben wurde. Wenn du so eine Datei verschieben willst, crasht es. Mindestens hast du Datenverlust, es sei denn, die Datei ist vom schreibenden Programm gelockt (aber darauf hast du im Zweifelsfall keinen Einfluss). Einer unserer Admins hat das so gelöst, dass er beobachtet hat, wie lange es dauert, bis die Dateien fertig geschrieben wurden. Das kann von Dateigröße, Datenträger, Übertragungsgeschwindigkeit, und und und ... abhängen. Darauf hat er noch mal ordentlich Sicherheit draufgerechnet und das als Intervall angenommen. Dateien die beim vorherigen Suchen gefunden wurden, werden verschoben. Neu hinzu gekommene werden in einem Array gesichert und beim nächsten Intervall verschoben.

Steffen
Knuefi
Knuefi 30.09.2018 aktualisiert um 17:38:52 Uhr
Goto Top
Genau das ist das Problem. Ich habe es mit robocopy versucht, dabei sind Dateien verschwunden.
rubberman
rubberman 30.09.2018 um 17:42:39 Uhr
Goto Top
Dachte ich mir. Die Lösung habe ich dir geschrieben. Mehr kann ich nicht sagen, weil ich nicht weiß mit welcher Sprache du das umsetzen willst.
Knuefi
Knuefi 30.09.2018 um 17:54:58 Uhr
Goto Top
Gibt es den eine Sprache die zuverlässiger in der Ausführung läuft als die andere ist?. Ich würde am Ende dieses Script, Batch oder PowerShell als exe per Aufgabenplanung laufen lassen. Was macht da Sinn?
rubberman
rubberman 30.09.2018 um 18:00:40 Uhr
Goto Top
Es gibt Sprachen, die es dir einfacher machen Daten zu speichern und Sprachen die es dir erschweren (wie bspw. Batch, wo es keinen Arraytyp gibt).
Warum muss man denn eigentlich eine interpretierte Sprache in eine exe "konvertieren" um sie als geplanten Task laufen zu lassen. Immer dieser Unsinn ...
Knuefi
Knuefi 30.09.2018 um 18:36:23 Uhr
Goto Top
gibt es einen Betrag dadrüber "Einer unserer Admins hat das so gelöst" ?, ich kann leider nichts finden. Oder kannst du mir was zu Verfügung stellen?, meine Programmierkentnisse sind leider nicht so gut.
Die Umwandlung in eine exe ist aufgrund nicht alleiniger Nutzer des Rechners, eine exe erschwert das rumfummeln bzw. kaputt machen.
rubberman
rubberman 30.09.2018 um 19:37:55 Uhr
Goto Top
Zitat von @Knuefi:
gibt es einen Betrag dadrüber
Nein. Einer unserer lokalen Firmenadmins ... Nicht hier im Forum.

Oder kannst du mir was zu Verfügung stellen?
Ich kann es auch nur selbst schreiben. Versuchs doch erst mal und komme zurück, wenn du Probleme hast.
Knuefi
Knuefi 30.09.2018 um 19:48:49 Uhr
Goto Top
Das war mein Versuch per Robocopy
@ECHO OFF
SETLOCAL
SET _what=/COPYALL /B /SEC /MIR
SET _options=/R:0 /W:0 /LOG:MyLogfileTest1%date%.txt /NFL /NDL

SET _source=C:\Users\Mustermann\Desktop\Quelle
SET _dest=C:\Users\Mustermann\Desktop\Ziel1
ROBOCOPY %_source% %_dest% %_what% %_options%

SET _source=C:\Users\Mustermann\Desktop\Quelle
SET _dest=C:\Users\Mustermann\Desktop\Ziel2
ROBOCOPY %_source% %_dest% %_what% %_options%
Meierjo
Meierjo 30.09.2018 aktualisiert um 20:27:44 Uhr
Goto Top
Hallo

Genau das ist das Problem. Ich habe es mit robocopy versucht, dabei sind Dateien verschwunden.

Wieso sollten beim Kopieren mit robocopy Dateien verloren gehen? Wenn sie noch geöffnet sind, können sie nicht kopiert werden, deswegen verschwinden die Dateien doch nicht??

Edit: Oder dann halt vielleicht, alle Dateien, ausser die jüngsten 2 kopieren?
for /f "skip=2 delims=" %%F in ('dir *.* /B /O-D /A-D') do copy %%F D:\Ziel\  
Gruss
Knuefi
Knuefi 30.09.2018 aktualisiert um 20:33:40 Uhr
Goto Top
Da hast du Recht, aber das verschieben macht Probleme nicht das kopieren. Oder sehe ich das falsch??
Du kopierst von der Quelle nach Ziel1, zudem verschiebst du von der Quelle nach Ziel2. Meine Vermutung (aufgrund fehlender Dateien, bei 2200 Testdateien 3 verschwunden) ist, bevor alles in Ziel1 kopiert ist, wird aus der Quelle in Ziel2 verschoben.
Ich würde es gerne mal mit deiner Lösung testen, vielleicht klappt das ja. Kannst du deinen Vorschlag mal vervollständigen?
Nachtrag: bei den Dateien handelt es sich um PDF Dateien, also garnicht so groß
rubberman
Lösung rubberman 30.09.2018 aktualisiert um 22:59:06 Uhr
Goto Top
*.vbs
Option Explicit

Const src = "%userprofile%\Desktop\Quelle", _  
      dst1 = "%userprofile%\Desktop\Ziel1", _  
      dst2 = "%userprofile%\Desktop\Ziel2", _  
      interval = 2000 ' milliseconds  

Dim objFSO, objWSH, arrFiles(), i, found

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objWSH = CreateObject("WScript.Shell")  
found = GetFileArray(arrFiles)

Do
  WScript.Sleep interval

  If found Then
    For i = 0 To UBound(arrFiles)
      On Error Resume Next
      Err.Clear
      objFSO.CopyFile objFSO.BuildPath(objWSH.ExpandEnvironmentStrings(src), arrFiles(i)), objFSO.BuildPath(objWSH.ExpandEnvironmentStrings(dst1), arrFiles(i))
      objFSO.CopyFile objFSO.BuildPath(objWSH.ExpandEnvironmentStrings(src), arrFiles(i)), objFSO.BuildPath(objWSH.ExpandEnvironmentStrings(dst2), arrFiles(i))
      If Err.Number = 0 Then
        objFSO.DeleteFile objFSO.BuildPath(objWSH.ExpandEnvironmentStrings(src), arrFiles(i))
      End If
      Err.Clear
      On Error Goto 0
    Next
  End If

  found = GetFileArray(arrFiles)
Loop


Function GetFileArray(ByRef arr)
  Dim objSrc, objFile, i, ubnd

  Set objSrc = objFSO.GetFolder(objWSH.ExpandEnvironmentStrings(src))
  Erase arr
  i = 0

  For Each objFile In objSrc.Files
    ReDim Preserve arr(i)
    arr(i) = objFile.Name
    i = i + 1
  Next

  On Error Resume Next
  Err.Clear
  ubnd = UBound(arr)
  If Err.Number = 0 Then
    GetFileArray = True
  Else
    GetFileArray = False
  End If
  Err.Clear
  On Error Goto 0

End Function
Rennt, einmal gestartet, in einert Schleife alle paar Sekunden über das Quellverzeichnis. Wie gesagt, das Intervall sinnvoll anpassen, sodass sicher ist dass die Dateien in dieser Zeitspanne geschrieben wurden.
Als VBScript ohne lästiges Fenster. Einfach in den Autostart des Users schmeißen oder als geplanten Task mit wscript.exe als Programm und Benutzer-Login als Trigger.
Knuefi
Knuefi 01.10.2018 aktualisiert um 17:27:08 Uhr
Goto Top
Respekt rubberman, Top!
läuft Fehlerfrei, habe schon 5 Test mit jedemenge Dateien gemacht, keine einzige Datei ist veschwunden.
Das gute ist, dass ich es mit meinen leihenhaften Kentnisse nach voll ziehen kann was da passiert.
Danke Dir vielmals., Danke auch an den zwei anderen Helfern.