Batchdatei zum Kopieren der Datei- und Ordnerstruktur nacheinander, Überprüfen des Ergebnisses und Speichern des Berichts im TXT-Format

Batchdatei zum Kopieren der Datei- und Ordnerstruktur nacheinander, Überprüfen des Ergebnisses und Speichern des Berichts im TXT-Format

Ich habe über 1 Million (kleine) Dateien (<500 kB jpg) in einer Struktur wie dieser:

H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folder

Jeder Unterunterunterordner enthält 10–15 Dateien, Unterunterordner könnte ein Datums-/Zeitstempel sein, Unterordner ist ein Maschinenname und Ordner ist eine weitere erhöhte Nummer.

Ich brauche eine Kopie des Hauptordners mit derselben Struktur, muss aber überprüfen, ob meine Kopie zu 100 % mit der Quelle übereinstimmt. Der Windows Explorer blockiert nach ca. 1000 Kopien und zeigt nicht einmal die Eigenschaften an (Größe, Größe auf der Festplatte, Inhalt).

Ich brauche einen Stapel, der H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderAalle 14 Dateiattribute liest, kopiert und einfügt. Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderAÖffnen Sie die Datei log.txt und schreiben Sie:

„file1.jpg 490 kB erfolgreich von H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA nach Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA kopiert …“

Und

„file15.jpg 470kB erfolgreich von H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA nach Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA kopiert“

usw

Markieren Sie das Ende des Protokolls (eine Zeile ====== oder so etwas) und fahren Sie erst dann mit dem nächsten Vorgang fort (Kopieren von Inhalt und Ordnerstruktur von sub_sub_sub_folderB). Wenn der Kopiervorgang nicht erfolgreich beendet wurde, stoppen Sie, erstellen Sie ein neues Protokoll error_sub_sub_sub_folderB.txt (das nächste Protokoll wird error_sub_sub_sub_folderZ.txt) und wechseln Sie erst nach der Erstellung des Protokolls zum nächsten sub_sub_sub_folder

Kurz gesagt: Ein schrittweises Protokollieren von Kopiervorgängen, das weder das System noch die Hardwareressourcen des Rechners beeinträchtigt.

Antwort1

Sowohl xcopy als auch robocopy erledigen die Aufgabe, aber die Ausgabe von robocopy kommt Ihrer Beschreibung näher.

xcopy src dst /i /e /f /v /c > log.txt

/F gibt die vollständigen Quell- und Zielpfade aus.

/V überprüft angeblich die Dateigrößen, druckt sie aber nicht in der Ausgabe aus.

Abgesehen davon, dass die Dateigrößen nicht protokolliert werden, wird damit größtenteils das erreicht, was Sie beschrieben haben. Es gibt andere Schalter, die steuern können, ob ACLs und Attribute kopiert werden. Da es sich um eine native EXE handelt, ist dies schneller als eine Skriptschleife. Sie erhalten jedoch kein separates Fehlerprotokoll und können einen Unterordner nicht abbrechen und bei einem Fehler mit dem nächsten Unterordner fortfahren (/C setzt alle Dateien bei einem Fehler fort).

Beispielausgabe:

C:\Users\Celery\test>xcopy src dst /i /e /f /v /c
C:\Users\Celery\test\src\a\blah.txt -> C:\Users\Celery\test\dst\a\blah.txt
C:\Users\Celery\test\src\a\blah2.txt -> C:\Users\Celery\test\dst\a\blah2.txt
C:\Users\Celery\test\src\b\blah.txt -> C:\Users\Celery\test\dst\b\blah.txt
C:\Users\Celery\test\src\b\blah2.txt -> C:\Users\Celery\test\dst\b\blah2.txt
4 File(s)

Robocopy erstellt ein ziemlich detailliertes Protokoll, einschließlich der Dateigrößen. Versuchen Sie:

robocopy src dst /e /np /log:log.txt [/tee]

Beispielausgabe:

C:\Users\Celery\test>robocopy src dst /e

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows

-------------------------------------------------------------------------------

  Started : Thursday, 22 January 2015 10:58:55 PM
   Source : C:\Users\Celery\test\src\
     Dest : C:\Users\Celery\test\dst\

    Files : *.*

  Options : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

          New Dir          0    C:\Users\Celery\test\src\
          New Dir          2    C:\Users\Celery\test\src\a\
            New File                  17        blah.txt
            New File                  17        blah2.txt
          New Dir          2    C:\Users\Celery\test\src\b\
            New File                  17        blah.txt
            New File                  17        blah2.txt

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         3         3         0         0         0         0
   Files :         4         4         0         0         0         0
   Bytes :        68        68         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :                2193 Bytes/sec.
   Speed :               0.125 MegaBytes/min.
   Ended : Thursday, 22 January 2015 10:58:55 PM

Andernfalls bräuchten Sie, um die Iteration selbst zu skripten, vier verschachtelte Schleifen, etwa:

for /d %%a in (main_folder\*) do (
  for /d %%b in (%%a\*) do (
    for /d %%c in (%%b\*) do (
      for /d %%d in (%%c\*) do (
        :: code to copy files and write logs goes here
      )
      echo ================= end of %%d =============== >> log.txt
    )
  )
)

Dadurch werden nur Dateien in den Unter-Unter-Unterordnern kopiert: Alle Dateien in Ordnern höherer Ebene werden ignoriert, da for /dnur über Verzeichnisse iteriert wird.

verwandte Informationen