Robocopy in Batch-Script kopiert immer langsamer
Hallo zusammen,
in meiner Abteilung von Service Außendienst Technikern hab ich mir vor ca. 5 Jahren etwas ans Bein gebunden was bisher gut funktioniert hat.
Es geht um das gemeinsame sichern von Kundendaten auf z.Z. ungefähr 25 Techniker-Laptops. Wir haben viele verschiedene Dateitypen wie z.B. PDF für Zeichnungen und Serviceberichte, Excel-Tabellen für z.B. IP-Adresslisten, Parameterdateien unterschiedlichster Art sowie das alles für Systeme aus vielen Einzelgeräten oder nur einzelne Geräte. Da wir kein professionelles Tool für einen solchen Bedarf haben und unsere IT nur mit "das kommt eh alles in die Cloud kommt" hab ich mir dieses System ausgedacht.
Ich habe hierfür eine immer komplexeres Batch-Script erstellt welches am Ende folgende Robocopy Befehle ausführt. Das Batch-Script sorgt dafür, das alle die das Script nutzen immer die gleiche Version nutzen und das weitere Softwaretools aktuell gehalten werden.
Wie in dem Robocopybefehl zu sehen wird zuerst das lokale Verzeichnis zum Server %remotedir% kopiert und nachdem das geschehen ist werden die Daten vom Server herunter geladen.
Der Sinn hiervon ist das meine im aktuellen Zeitraum aufgenommen Parameterdateien, Zeichnungen, ... hochgeladen werden und im zweiten Schritt die Daten meiner Kollegen auf meinen Laptop kopiert werden sollen.
Mein Problem z.Z. ist das seid einigen Monaten das hochladen extrem lange dauert. Ich habe den Verdacht, dass Dateien die schon auf dem Server sind immer wieder neu hochgeladen/runtergeladen werden. Ich habe das Gefühl, das hier der Zeitstempel einiger Dateien von irgendeinem anderen Laptop/Software verändert wird und somit eine "aktualisierte" Datei vorgaukelt. Eigentlich ist das mit aktualisiertem Zeitstempel egal, da alle Dateien einen Tagesgenauen Namen haben (Produktnummer_Seriennummer_Datum_Kundenname_Maschinenname.xyz). Mehrere Dateien an einem Tag ist unüblich und muss wenn nötig auch im Dateinamen ersichtlich sein.
Bisher war es so das die Daten innerhalb von ca. 30 Minuten hochgeladen bzw. erkannt wurde das die Daten schon auf dem Server sind und somit nicht kopiert werden. Es dauerte nur dann länger, wenn ich viel hochzuladen hatte oder ein andere Kollege viel hochgeladen hatte.
Aktuell habe ich ca. 41GB in 19300 Verzeichnissen und 35000 Dateien.
Da ich aber kein ausgebildeter IT-Fachmann bin und unsere IT uns etwas alleine lässt hoffe ich das mir hier jemand weiter helfen kann.
Grüße Jochen
PS: Hier noch das komplette Script.
in meiner Abteilung von Service Außendienst Technikern hab ich mir vor ca. 5 Jahren etwas ans Bein gebunden was bisher gut funktioniert hat.
Es geht um das gemeinsame sichern von Kundendaten auf z.Z. ungefähr 25 Techniker-Laptops. Wir haben viele verschiedene Dateitypen wie z.B. PDF für Zeichnungen und Serviceberichte, Excel-Tabellen für z.B. IP-Adresslisten, Parameterdateien unterschiedlichster Art sowie das alles für Systeme aus vielen Einzelgeräten oder nur einzelne Geräte. Da wir kein professionelles Tool für einen solchen Bedarf haben und unsere IT nur mit "das kommt eh alles in die Cloud kommt" hab ich mir dieses System ausgedacht.
Ich habe hierfür eine immer komplexeres Batch-Script erstellt welches am Ende folgende Robocopy Befehle ausführt. Das Batch-Script sorgt dafür, das alle die das Script nutzen immer die gleiche Version nutzen und das weitere Softwaretools aktuell gehalten werden.
if "%var0%"=="1" robocopy %localdir% %remotedir% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /S /XD 09_* 0-* /XF SYS_MSG.LOG Dir.log "New Project.xyz" *.jpg *.bmp *.png *id.8MAN thumbs.db /MAXAGE:20191231 /r:2 /V
if "%var0%"=="1" robocopy %remotedir% %localdir% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /S /XD 09_* 0-* /XF *id.8MAN thumbs.db /MAXAGE:20191231 /r:2 /V
Wie in dem Robocopybefehl zu sehen wird zuerst das lokale Verzeichnis zum Server %remotedir% kopiert und nachdem das geschehen ist werden die Daten vom Server herunter geladen.
Der Sinn hiervon ist das meine im aktuellen Zeitraum aufgenommen Parameterdateien, Zeichnungen, ... hochgeladen werden und im zweiten Schritt die Daten meiner Kollegen auf meinen Laptop kopiert werden sollen.
Mein Problem z.Z. ist das seid einigen Monaten das hochladen extrem lange dauert. Ich habe den Verdacht, dass Dateien die schon auf dem Server sind immer wieder neu hochgeladen/runtergeladen werden. Ich habe das Gefühl, das hier der Zeitstempel einiger Dateien von irgendeinem anderen Laptop/Software verändert wird und somit eine "aktualisierte" Datei vorgaukelt. Eigentlich ist das mit aktualisiertem Zeitstempel egal, da alle Dateien einen Tagesgenauen Namen haben (Produktnummer_Seriennummer_Datum_Kundenname_Maschinenname.xyz). Mehrere Dateien an einem Tag ist unüblich und muss wenn nötig auch im Dateinamen ersichtlich sein.
Bisher war es so das die Daten innerhalb von ca. 30 Minuten hochgeladen bzw. erkannt wurde das die Daten schon auf dem Server sind und somit nicht kopiert werden. Es dauerte nur dann länger, wenn ich viel hochzuladen hatte oder ein andere Kollege viel hochgeladen hatte.
Aktuell habe ich ca. 41GB in 19300 Verzeichnissen und 35000 Dateien.
Da ich aber kein ausgebildeter IT-Fachmann bin und unsere IT uns etwas alleine lässt hoffe ich das mir hier jemand weiter helfen kann.
Grüße Jochen
PS: Hier noch das komplette Script.
@echo off
@mode con cols=130 lines=30
color 9f
chcp 1252
rem --------------------------------- Globale Einstellungen -----------------------------------------------
rem Version
set Version=V2.6.4
@title Replizierungstool %Version%
rem Replizierungstool update voreinstellen
set repliDIR=\\server\SVD\SAD_Bereiche\SAD_DIV08\Software\Kundentool\Replikation\
set repliFILE=KundenReplizierung.bat
rem Kundentool Update vorbereiten
set KundentoolDIR=\\server\SVD\SAD_Bereiche\SAD_DIV08\Software\Kundentool\Kundentool\
set KundentoolFILE=Kunden.exe
set KundentoolANLEITUNG=Anleitung.pptx
rem DIV08-Serververzeichnis einstellen
set remotedir=\\server\SVD\DIV08_Data
rem Wartungsprotokolldatei einstellen
set WartProtDIR=\\server\SVD\SAD_Bereiche\SAD_DIV08\Software\Kundentool\Kundentool\Wartung
set WartProtFILE=Wartungsprotokoll.docm
rem SDD-Verzeichnisse einstellen
set SDDdirRemote=\\server\SVD\SAD_Bereiche\SAD_DIV08\Programm-SDDs
set SDDdirLocal=C:\ProgramData\Firma\Programm\jars\devices
rem Verschobene Ordner Meldung in Log-Datei speichern - Speicherort
set LogDir=C:\Users\%USERNAME%\Documents\Kundentool_Logs
mkdir %LogDir%
rem Sicherungsverzeichniss für automatisch gelöschte Daten voreinstellen. Nach Zeile 4 auslesen Schleife sofort verlassen nach A.
for /F "skip=4" %%y in (config.cfg) do set savedir=%%y&goto A
:A
rem Lokales Datenverezichnis aus Kundentool Konfiguration voreinstellen. Nach Zeile 1 auslesen Schleife sofort verlassen nach B.
for /F "skip=1" %%x in (config.cfg) do set localdir=%%x&goto B
:B
rem --------------------------------- Replizierberechtigung ----------------------------------------------
rem Um Kontrolle über die Daten zu behalten wird hier überprüft ob der Nutzer replizieren darf
findstr /L %USERNAME% \\server\SVD\SAD_Bereiche\SAD_DIV08\Kundentool_Admin\userlist.txt
if %ERRORLEVEL% EQU 0 GOTO REPLIUPDATE
if %ERRORLEVEL% GEQ 1 GOTO USERDENY
rem ------------------------------------ Update Repliziertool -----------------------------------------------
:REPLIUPDATE
robocopy %repliDIR% C:\SAD08Tools\Kundentool\ %repliFILE%
if %ERRORLEVEL% EQU 0 GOTO KUNDENUPDATE
if %ERRORLEVEL% EQU 1 GOTO RESTART
if %ERRORLEVEL% GEQ 2 cls&echo Updateüberprüfung Replioziertool fehlgeschlagen Bitte nochmal starten& GOTO END
pause
rem ------------------------------------- Update Kundentool -------------------------------------------------
:KUNDENUPDATE
robocopy %KundentoolDIR% C:\SAD08Tools\Kundentool\ %KundentoolFILE%
if %ERRORLEVEL% EQU 0 GOTO ANLEITUNGSUPDATE
if %ERRORLEVEL% EQU 1 GOTO UpdMeldKundentool
if %ERRORLEVEL% GEQ 2 cls&echo Updateüberprüfung Kundentool fehlgeschlagen& GOTO END
pause
rem ------------------------------------- Update Anleitung ----------------------------------------------------
:ANLEITUNGSUPDATE
robocopy %KundentoolDIR% C:\SAD08Tools\Kundentool\ %KundentoolANLEITUNG%
if %ERRORLEVEL% EQU 0 GOTO WARTPROTUPDATE
if %ERRORLEVEL% EQU 1 GOTO UpdMeldAnleitung
if %ERRORLEVEL% GEQ 2 cls&echo Updateüberprüfung Anleitung fehlgeschlagen& GOTO END
pause
rem -------------------------------------- Update Wartungsprotokoll -------------------------------------------
:WARTPROTUPDATE
robocopy %WartProtDIR% C:\SAD08Tools\Kundentool\Wartung\ %WartProtFILE%
if %ERRORLEVEL% EQU 0 GOTO SERVERCLEAN
if %ERRORLEVEL% EQU 1 GOTO UpdMeldWartProt
if %ERRORLEVEL% GEQ 2 cls&echo Updateüberprüfung Wartungsprotokoll fehlgeschlagen& GOTO END
pause
rem --------------------------------- Server aufräumen ---------------------------------------------
:SERVERCLEAN
rem Überprüfen ob man das aktuelle Serveraufräumen schon mitgemacht hat
findstr /L %USERNAME% \\server\SVD\SAD_Bereiche\SAD_DIV08\Kundentool_Donelist\donelist.txt
if %ERRORLEVEL% EQU 0 GOTO REPLICATION
rem Wenn Serveraufräumen noch nicht mitgemacht wurde wird in 00_del_list.txt nachgeschaut was verschoben werden soll, davon eine Sicherungskopie angelegt
rem und dann wird gelöscht aus den Lokalen Daten
for /F "skip=25" %%f in (\\server\SVD\SAD_Bereiche\SAD_DIV08\Kundentool_Admin\00_del_list.txt) do robocopy /S %localdir%%%f %savedir%\%%f&rd %localdir%%%f/s/q
rem --------------------------------- Replizierung ----------------------------------------------------
:REPLICATION
cls
echo +====================================================================================+
echo ¦------------------------Einfaches Repliziertool %Version%----------------------------¦
echo ¦-----------------------------------HAUPTMENÜ----------------------------------------¦
echo ¦====================================================================================¦
echo ¦ [1] Replizieren Starten
echo ¦ [2] Replizieren Starten und dannach Rechner herunterfahren
echo ¦
echo ¦ Eigenes Datenverzeichnis: %localdir%
echo ¦ Server Datenverzeichnis: %remotedir%
echo ¦ Sicherungsverzeichnis für automatisch verschobene Daten:
echo ¦ %savedir%
echo ¦
echo ¦ Zuletzt automatisch verschobene Verzeichnisse:
rem Hier wird nochmal nachgefragt ob man das Aufräumen schon mitgemacht hat.
findstr /L %USERNAME% \\server\SVD\SAD_Bereiche\SAD_DIV08\Kundentool_Donelist\donelist.txt
if %ERRORLEVEL% EQU 0 echo ¦ Aktuell wurde kein Verzeichnis verschoben&GOTO C
rem Wenn nicht mitgemacht wurde werden die aktuell verschobene Daten angezeigt und in der Logdatei gespeichert
for /F "skip=25" %%f in (\\server\SVD\SAD_Bereiche\SAD_DIV08\Kundentool_Admin\00_del_list.txt) do echo ¦ Verschobenes Verzeichnis: %localdir%%%f&echo Am %date% %time% Verschobenes Verzeichnis: %localdir%%%f>>%LogDir%\Log.txt
rem Hier wird in der donelist.txt eingetragen das man am Serveraufräume teilgenommen hat.
echo %USERNAME% %date% %time% >> \\server\SVD\SAD_Bereiche\SAD_DIV08\Kundentool_Donelist\donelist.txt
:C echo ¦
echo ¦
echo ¦
echo ¦
echo ¦
echo ¦ [9] Beenden
echo +====================================================================================+
set var0=0
set /p var0=" Funktion auswählen: "
if "%var0%"=="1" robocopy %localdir% %remotedir% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /S /XD 09_* 0-* /XF SYS_MSG.LOG Dir.log "New Project.Programm" *.jpg *.bmp *.png *id.8MAN thumbs.db /MAXAGE:20191231 /r:2 /V
if "%var0%"=="1" robocopy %remotedir% %localdir% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /S /XD 09_* 0-* /XF *id.8MAN thumbs.db /MAXAGE:20191231 /r:2 /V
rem if "%var0%"=="1" robocopy %SDDdirLocal% %SDDdirRemote% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /XF *id.8MAN thumbs.db /r:2 /FFT /COPY:D
rem if "%var0%"=="1" robocopy %SDDdirRemote% %SDDdirLocal% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /XF *id.8MAN thumbs.db /r:2 /FFT /COPY:D
if "%var0%"=="2" robocopy %localdir% %remotedir% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /S /XD 09_* 0-* /XF SYS_MSG.LOG Dir.log "New Project.Programm" *.jpg *.bmp *.png *id.8MAN thumbs.db /MAXAGE:20191231 /r:2 /V
if "%var0%"=="2" robocopy %remotedir% %localdir% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /S /XD 09_* 0-* /XF *id.8MAN /MAXAGE:20191231 thumbs.db /r:2 /V
rem if "%var0%"=="2" robocopy %SDDdirLocal% %SDDdirRemote% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /XF *id.8MAN thumbs.db /r:2 /FFT /COPY:D
rem if "%var0%"=="2" robocopy %SDDdirRemote% %SDDdirLocal% /MT:64 /LOG+:%LogDir%\LOG_%DATE%.txt /XF *id.8MAN thumbs.db /r:2 /FFT /COPY:D & GOTO SHUTDOWN
if "%var0%" GEQ "3" if "%var0%" LEQ "8" GOTO REPLICATION
if "%var0%" GEQ "9" goto END
pause
GOTO REPLICATION
rem ------------------------------------- Ende und herunterfahren------------------------------------------------
:SHUTDOWN
cls
echo +====================================================================================+
echo ¦------------------------Einfaches Repliziertool %Version%----------------------------¦
echo ¦----------------------------------- Shutdown ---------------------------------------¦
echo ¦ ¦
echo ¦ Das Replizieretool ist fertig. Der Rechner wird in 60 Sekunden ab jetzt ¦
echo ¦ ¦
echo ¦ heruntergefahren. ¦
echo ¦ ¦
echo ¦ Wenn man doch nicht herunterfahren möchte bitte "j" eingeben. ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦====================================================================================¦
shutdown /s /t 60
set var1=0
set /p var1=" Shutdown abbrechen? "
if "%var1%"=="j" shutdown /a&echo ¦ Shutdown abgebrochen
GOTO END
rem ------------------------------------ Nach Update Kundentool -------------------------------------
:UpdMeldKundentool
cls
echo +====================================================================================+
echo ¦------------------------Einfaches Repliziertool %Version%----------------------------¦
echo ¦---------------------------------- UPDATE Kundentool -------------------------------¦
echo ¦ ¦
echo ¦ Das Kundentool wurde aktualisiert ¦
echo ¦ ¦
echo ¦ Beim nächsten Start des Kundentool sollte eine neue Versionsnummer ¦
echo ¦ ¦
echo ¦ in der Titelzeile zu lesen sein. ¦
echo ¦ ¦
echo ¦ Das Repliziertool ist hiervon nicht betroffen zum weitermachen bitte ¦
echo ¦ ¦
echo ¦ eine Taste drücken ¦
echo ¦ ¦
echo ¦====================================================================================¦
pause
GOTO SERVERCLEAN
rem ------------------------------------ Nach Update Anleitung ---------------------------------
:UpdMeldAnleitung
cls
echo +====================================================================================+
echo ¦------------------------Einfaches Repliziertool %Version%----------------------------¦
echo ¦---------------------------------- UPDATE Anleitung --------------------------------¦
echo ¦ ¦
echo ¦ Die Kundentool Anleitung wurde aktualisiert ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ Das Repliziertool ist hiervon nicht betroffen zum weitermachen bitte ¦
echo ¦ ¦
echo ¦ eine Taste drücken ¦
echo ¦ ¦
echo ¦====================================================================================¦
pause
GOTO SERVERCLEAN
rem ------------------------------------ Nach Update Wartungsprotokoll ---------------------
:UpdMeldWartProt
cls
echo +====================================================================================+
echo ¦------------------------Einfaches Repliziertool %Version%----------------------------¦
echo ¦---------------------------------- UPDATE Wartungsprotokoll ------------------------¦
echo ¦ ¦
echo ¦ Das Wartungsprotokoll wurde aktualisiert ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ Das Repliziertool ist hiervon nicht betroffen zum weitermachen bitte ¦
echo ¦ ¦
echo ¦ eine Taste drücken ¦
echo ¦ ¦
echo ¦====================================================================================¦
pause
GOTO SERVERCLEAN
rem ------------------------------------ Nach Repliziertool Update ----------------------------------
:RESTART
cls
echo +====================================================================================+
echo ¦------------------------Einfaches Repliziertool %Version%----------------------------¦
echo ¦-------------------------------------UPDATE-----------------------------------------¦
echo ¦ ¦
echo ¦ Das Replizieretool wurde aktualisiert und wird mit dem nächsten ¦
echo ¦ ¦
echo ¦ Tastendruck beendet. Zum Replizieren bitte nochmal starten. ¦
echo ¦ ¦
echo ¦ In der Überschrift sollte dann eine höhere Versionsnummer zu lesen sein. ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦====================================================================================¦
GOTO END
rem ------------------------------ Nicht berechtigter User -----------------------------------------------------
:USERDENY
cls
echo +====================================================================================+
echo ¦------------------------Einfaches Repliziertool %Version%----------------------------¦
echo ¦------------------------ Unberechtigter Nutzer--------------------------------------¦
echo ¦ ¦
echo ¦ Der Benutzer %USERNAME% ist nicht als berechtigter Nutzer aufgeführt. ¦
echo ¦ ¦
echo ¦ Bitte mit einem Kundentool-Admin kontakt aufnehmen ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦ ¦
echo ¦====================================================================================¦
rem ------------------------------------- Normales Ende ---------------------------------------------------------
:END
echo Programm beendet - zum Fenster schließen bitte Taste drücken
pause
::exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3104801871
Url: https://administrator.de/forum/robocopy-in-batch-script-kopiert-immer-langsamer-3104801871.html
Ausgedruckt am: 22.04.2025 um 09:04 Uhr
1 Kommentar
Hallo,
da da eh schon gefrickelt wurde. Was häst du von einen neckischen Duplicati?
Jobs, Logs etc. Kopieren kann das Ding ganz gut....
https://www.duplicati.com/
PS:
Sehe aber noch mehr: hab also kein ERP System, das offlinefhäig ist - richtig? Also nicht nur reines Backup, sondern aktuell Projekte/ Kunden werden mit den Stammdaten gemerged.
da da eh schon gefrickelt wurde. Was häst du von einen neckischen Duplicati?
Jobs, Logs etc. Kopieren kann das Ding ganz gut....
https://www.duplicati.com/
PS:
Sehe aber noch mehr: hab also kein ERP System, das offlinefhäig ist - richtig? Also nicht nur reines Backup, sondern aktuell Projekte/ Kunden werden mit den Stammdaten gemerged.