Batch Grundkurs 009: Backup mit Datum erstellen
Worum geht es in diesem Teil?
In diesem neunten Teil des Batch-Grundkurses erstellen wir automatisch Backups mit Datum und Uhrzeit im Ordnernamen.
Das Skript legt innerhalb eines Projektordners einen Backup-Hauptordner an und erstellt darin für jede Sicherung einen neuen Backup-Ordner mit Zeitstempel.
Beispiel:
Projektordner
├── Datei1.txt
├── Dokumentation.pdf
├── Daten
└── Backups
└── Backup_2026-06-27_14-35-20

Ordner Backups mit Backup Ordner
Dadurch kann man Projektstände sehr einfach sichern, ohne jedes Mal manuell einen neuen Backup-Ordner anlegen zu müssen.
Warum ist dieses Beispiel praktisch?
Backups sind im Alltag extrem wichtig. Besonders bei Projektordnern, Steuerunterlagen, Webseiten, Skripten, Videoprojekten oder Office-Dateien möchte man oft einen Stand sichern, bevor man weiterarbeitet.
Typische Situationen:
Vor größeren Änderungen ein Projekt sichern
Vor dem Umbenennen vieler Dateien eine Kopie erstellen
Vor dem Sortieren oder Verschieben von Dateien absichern
Arbeitsstände mit Datum archivieren
Projektordner für später nachvollziehbar sichern
Dieses Skript nutzt robocopy, ein leistungsfähiges Windows-Werkzeug zum Kopieren von Dateien und Ordnern.
Hinweis zur Kursreihe
Dieses Skript-Paket ist Teil einer größeren Vergleichsreihe. Die Aufgabe wird zuerst mit Batch umgesetzt. Später folgen passende Varianten mit PowerShell 7 und Python, damit man die unterschiedlichen Lösungswege direkt miteinander vergleichen kann.
Batch = einfacher Einstieg mit Windows-Bordmitteln
PowerShell 7 = moderner und leistungsfähiger für Windows-Automatisierung
Python = sehr flexibel und auch für größere Tools geeignet
Downloads zu diesem Teil
Für diesen Teil gibt es zwei Downloads: die Batchdateien für diesen Kursteil und die gemeinsame Testumgebung für die Windows-Automatisierung.
Batchdateien für Teil 009:
Download Batch Grundkurs: 009_Backup_mit_Datum als ZIP Datei.
Entpacken nach:
C:\TOPTORIALS_CODE\000_Batch_Grundkurs
Falls der Ordner noch nicht existiert, lege ihn vorher im Explorer an. Nach dem Entpacken entsteht dort automatisch:
C:\TOPTORIALS_CODE\000_Batch_Grundkurs\009_Backup_mit_Datum
Testumgebung für Windows-Automatisierung:
Download TOPTORIALS_Testdaten_Windows_Automatisierung_V001.zip
Entpacken nach:
C:\TOPTORIALS_CODE\1000_TESTBEREICH
Für den Batch-Grundkurs benenne den entpackten Ordner anschließend um in:
TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001
Testumgebung zum Mitmachen
Für diese Tutorialreihe gibt es eine vorbereitete Testumgebung. Damit kannst du die Batchdateien gefahrlos ausprobieren, ohne eigene wichtige Dateien verwenden zu müssen.
Die Testumgebung ist sprachübergreifend aufgebaut. Das bedeutet: Die gleiche Grundstruktur kann später auch für die passenden PowerShell-7- und Python-Versionen verwendet werden.
Empfohlener Speicherort für die ZIP-Datei:
C:\TOPTORIALS_CODE\1000_TESTBEREICH
Wenn du die ZIP-Datei dort entpackst, entsteht zunächst dieser Ordner:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_V001
Für den Batch-Grundkurs benennen wir diesen entpackten Ordner um in:
TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001
Für diesen Teil verwendest du dann den passenden Unterordner:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\009_Backup_mit_Datum
Du musst die Testumgebung aber nicht verwenden. Die Batchdateien funktionieren auch mit eigenen Projektordnern. Wichtig ist nur, dass du zuerst mit Testdaten arbeitest und nicht direkt mit wichtigen Originaldateien.
Sicherheitshinweis
Wichtiger Hinweis:
Die Skripte werden auf eigene Verantwortung verwendet. Teste jedes Skript zuerst in einem separaten Testordner und niemals direkt mit wichtigen Originaldateien. Einige Skripte können Dateien umbenennen, verschieben oder neue Dateien und Ordner erstellen. Lies die Hinweise auf der jeweiligen Seite sorgfältig durch und verwende zuerst immer den Testmodus, wenn ein Skript eine _test-Version enthält.
Dieses Skript-Paket kopiert Dateien und Ordner. Es löscht keine Dateien und verwendet bewusst kein Spiegeln mit /MIR. Trotzdem sollte man Backups immer zuerst in einer Testumgebung ausprobieren.
Enthaltene Skripte
Zu diesem Teil gehören vier Batchdateien:
009_backup_mit_datum_test.bat
009_backup_mit_datum_mit_log.bat
009_sendto_backup_mit_datum_mit_log_test.bat
009_sendto_backup_mit_datum_mit_log.bat
Welche Variante brauche ich?
- Projektordner-Variante im Testmodus: Wenn die Batchdatei direkt im Projektordner liegt und nur angezeigt werden soll, was kopiert würde.
- Projektordner-Variante mit Log: Wenn die Batchdatei direkt im Projektordner liegt und ein echtes Backup mit Protokoll erstellt werden soll.
- SendTo-Testvariante: Wenn ein oder mehrere Projektordner per Rechtsklick übergeben werden und nur eine Vorschau erzeugt werden soll.
- SendTo-Logvariante: Wenn ein oder mehrere Projektordner per Rechtsklick übergeben und echte Backups mit Protokoll erstellt werden sollen.
Grundprinzip des Backups
Das Skript erstellt im jeweiligen Projektordner einen Backup-Hauptordner. Standardmäßig heißt dieser Ordner:
Backups
In diesem Ordner wird für jede Sicherung ein neuer Unterordner mit Zeitstempel erstellt.
Beispiel:
Backups
├── Backup_2026-06-27_14-35-20
├── Backup_2026-06-28_09-10-05
└── Backup_2026-06-29_18-22-11
Der Backup-Hauptordner selbst wird vom Backup ausgeschlossen, damit alte Backups nicht wieder in neue Backups kopiert werden.
Variante 1: Backup im aktuellen Projektordner testen
Die Datei heißt:
009_backup_mit_datum_test.bat
Diese Variante wird direkt in den Projektordner kopiert, der gesichert werden soll.
Solange _test im Dateinamen steht, verwendet das Skript robocopy mit /L. Dadurch wird nur aufgelistet, was kopiert würde. Es wird noch nichts tatsächlich kopiert.
Der komplette Code der Testvariante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 009_backup_mit_datum_test.bat
REM Beschreibung: Sichert einen Projektordner in einen datierten Backupordner.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
rem Name des Backup-Hauptordners
set "BACKUP_HAUPTORDNER=Backups"
rem Ausschlusslisten vorbereiten
set "AUSGESCHLOSSENE_ORDNER="
set "AUSGESCHLOSSENE_DATEIEN="
rem Zusaetzliche Ordner ausschliessen
rem Jeder Ordner bekommt eine eigene Zeile.
rem Dadurch funktionieren auch Namen mit Leerzeichen.
call :ordner_ausschliessen "Temp"
call :ordner_ausschliessen "Cache"
call :ordner_ausschliessen "Alte Dateien"
rem Dateien oder Dateimuster ausschliessen
rem Hier koennen komplette Dateinamen oder Muster eingetragen werden.
call :datei_ausschliessen "desktop.ini"
call :datei_ausschliessen "thumbs.db"
call :datei_ausschliessen "*.tmp"
call :datei_ausschliessen "*.log"
call :datei_ausschliessen "*.bak"
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
set "QUELLORDNER=%cd%"
set "BACKUP_PFAD=%QUELLORDNER%\%BACKUP_HAUPTORDNER%"
set "ZIELORDNER=%BACKUP_PFAD%\Backup_%ZEITSTEMPEL%"
echo Backup mit Datum wird vorbereitet...
echo.
echo Quellordner:
echo %QUELLORDNER%
echo.
echo Backup-Hauptordner:
echo %BACKUP_PFAD%
echo.
echo Zielordner:
echo %ZIELORDNER%
echo.
echo Testmodus: %TESTMODUS%
echo.
echo Ausgeschlossene Ordner:
echo !AUSGESCHLOSSENE_ORDNER!
echo.
echo Ausgeschlossene Dateien / Dateimuster:
echo !AUSGESCHLOSSENE_DATEIEN!
echo.
if "%TESTMODUS%"=="JA" goto start
echo ACHTUNG: Dieses Skript erstellt jetzt wirklich ein Backup.
echo.
set /p "ANTWORT=Zum Fortfahren JA eingeben: "
if /i "%ANTWORT%"=="JA" goto start
echo.
echo Abgebrochen.
echo.
pause
exit /b
:start
echo.
if "%TESTMODUS%"=="JA" (
echo Testmodus aktiv.
echo Es wird nur angezeigt, was kopiert wuerde.
echo.
robocopy "%QUELLORDNER%" "%ZIELORDNER%" /E /L /XJ /R:1 /W:1 /XD "%BACKUP_PFAD%" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
) else (
if not exist "%BACKUP_PFAD%" mkdir "%BACKUP_PFAD%"
echo Backup wird erstellt...
echo.
robocopy "%QUELLORDNER%" "%ZIELORDNER%" /E /XJ /R:1 /W:1 /XD "%BACKUP_PFAD%" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
)
echo.
echo Fertig.
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurde noch nichts kopiert.
echo Wenn alles richtig aussieht, entferne _test aus dem Dateinamen.
) else (
echo Backup wurde erstellt:
echo %ZIELORDNER%
)
echo.
pause
exit /b
:ordner_ausschliessen
set "AUSGESCHLOSSENE_ORDNER=!AUSGESCHLOSSENE_ORDNER! "%~1""
exit /b
:datei_ausschliessen
set "AUSGESCHLOSSENE_DATEIEN=!AUSGESCHLOSSENE_DATEIEN! "%~1""
exit /b
Code der Testvariante erklärt
Testmodus erkennen
set "TESTMODUS=NEIN"
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
Das Skript erkennt den Testmodus über den Dateinamen. Wenn _test im Namen der Batchdatei vorkommt, wird nur eine Vorschau angezeigt.
Backup-Ordner festlegen
set "BACKUP_ORDNER=Backups"
Mit dieser Variable wird der Name des Backup-Hauptordners festgelegt.
Wenn du einen anderen Namen verwenden möchtest, kannst du diese Zeile anpassen.
Zeitstempel erzeugen
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
Diese Zeilen erzeugen einen Zeitstempel aus Datum und Uhrzeit.
Der Zeitstempel wird später für den Namen des Backup-Ordners verwendet.
Quell- und Zielordner setzen
set "QUELLE=%CD%"
set "BACKUP_ROOT=%QUELLE%\%BACKUP_ORDNER%"
set "ZIEL=%BACKUP_ROOT%\Backup_%ZEITSTEMPEL%"
%CD% steht für den aktuellen Ordner. In der Projektordner-Variante ist das der Ordner, in dem die Batchdatei gestartet wurde.
BACKUP_ROOT ist der Backup-Hauptordner.
ZIEL ist der konkrete neue Backup-Ordner mit Zeitstempel.
Backup-Hauptordner erstellen
if not exist "%BACKUP_ROOT%" mkdir "%BACKUP_ROOT%"
Falls der Ordner Backups noch nicht existiert, wird er erstellt.
robocopy verwenden
Das eigentliche Kopieren übernimmt robocopy.
Im Testmodus wird zusätzlich /L verwendet. Dadurch listet robocopy nur auf, was passieren würde.
Wichtig: Dieses Skript verwendet bewusst kein /MIR. Dadurch wird nichts gespiegelt und nichts gelöscht.
Variante 2: Backup mit Logdatei im aktuellen Projektordner
Die Datei heißt:
009_backup_mit_datum_mit_log.bat
Diese Variante erstellt ein echtes Backup und schreibt zusätzlich ein Protokoll direkt in den Backup-Ordner.
Der komplette Code der Log-Variante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 009_backup_mit_datum_mit_log.bat
REM Beschreibung: Sichert einen Projektordner in einen datierten Backupordner und schreibt ein Log.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
rem Name des Backup-Hauptordners
set "BACKUP_HAUPTORDNER=Backups"
rem Ausschlusslisten vorbereiten
set "AUSGESCHLOSSENE_ORDNER="
set "AUSGESCHLOSSENE_DATEIEN="
rem Zusaetzliche Ordner ausschliessen
rem Jeder Ordner bekommt eine eigene Zeile.
rem Dadurch funktionieren auch Namen mit Leerzeichen.
call :ordner_ausschliessen "Temp"
call :ordner_ausschliessen "Cache"
call :ordner_ausschliessen "Alte Dateien"
rem Dateien oder Dateimuster ausschliessen
rem Hier koennen komplette Dateinamen oder Muster eingetragen werden.
call :datei_ausschliessen "desktop.ini"
call :datei_ausschliessen "thumbs.db"
call :datei_ausschliessen "*.tmp"
call :datei_ausschliessen "*.log"
call :datei_ausschliessen "*.bak"
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
set "QUELLORDNER=%cd%"
set "BACKUP_PFAD=%QUELLORDNER%\%BACKUP_HAUPTORDNER%"
set "ZIELORDNER=%BACKUP_PFAD%\Backup_%ZEITSTEMPEL%"
set "LOGDATEI=%ZIELORDNER%\backup_protokoll_%ZEITSTEMPEL%.log"
echo Backup mit Datum wird vorbereitet...
echo.
echo Quellordner:
echo %QUELLORDNER%
echo.
echo Backup-Hauptordner:
echo %BACKUP_PFAD%
echo.
echo Zielordner:
echo %ZIELORDNER%
echo.
echo Logdatei:
echo %LOGDATEI%
echo.
echo Testmodus: %TESTMODUS%
echo.
echo Ausgeschlossene Ordner:
echo !AUSGESCHLOSSENE_ORDNER!
echo.
echo Ausgeschlossene Dateien / Dateimuster:
echo !AUSGESCHLOSSENE_DATEIEN!
echo.
if "%TESTMODUS%"=="JA" goto start
echo ACHTUNG: Dieses Skript erstellt jetzt wirklich ein Backup.
echo.
set /p "ANTWORT=Zum Fortfahren JA eingeben: "
if /i "%ANTWORT%"=="JA" goto start
echo.
echo Abgebrochen.
echo.
pause
exit /b
:start
echo.
if "%TESTMODUS%"=="JA" (
echo Testmodus aktiv.
echo Es wird nur angezeigt, was kopiert wuerde.
echo Im Testmodus wird noch keine Logdatei im Backup-Ordner erstellt.
echo.
robocopy "%QUELLORDNER%" "%ZIELORDNER%" /E /L /XJ /R:1 /W:1 /XD "%BACKUP_PFAD%" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
) else (
if not exist "%BACKUP_PFAD%" mkdir "%BACKUP_PFAD%"
if not exist "%ZIELORDNER%" mkdir "%ZIELORDNER%"
echo Backup wird erstellt...
echo.
robocopy "%QUELLORDNER%" "%ZIELORDNER%" /E /XJ /R:1 /W:1 /TEE /UNILOG:"%LOGDATEI%" /XD "%BACKUP_PFAD%" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
)
echo.
echo Fertig.
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurde noch nichts kopiert.
echo Wenn alles richtig aussieht, entferne _test aus dem Dateinamen.
) else (
echo Backup wurde erstellt:
echo %ZIELORDNER%
echo.
echo Logdatei wurde erstellt:
echo %LOGDATEI%
)
echo.
pause
exit /b
:ordner_ausschliessen
set "AUSGESCHLOSSENE_ORDNER=!AUSGESCHLOSSENE_ORDNER! "%~1""
exit /b
:datei_ausschliessen
set "AUSGESCHLOSSENE_DATEIEN=!AUSGESCHLOSSENE_DATEIEN! "%~1""
exit /b
Wichtige Unterschiede der Log-Variante
Logdatei im Backup-Ordner
Die Logdatei wird direkt im jeweiligen Backup-Ordner gespeichert.
Beispiel:
Backups\Backup_2026-06-27_14-35-20\backup_protokoll_2026-06-27_14-35-20.log
Dadurch gehört das Protokoll direkt zu dem Backup, das erstellt wurde.
Unicode-Log für Umlaute
Für das Protokoll wird /UNILOG verwendet. Dadurch wird das robocopy-Protokoll als Unicode-Datei geschrieben.
Das ist besonders hilfreich, wenn Datei- oder Ordnernamen Umlaute enthalten.
Ausgabe im Fenster und im Log
Mit /TEE zeigt robocopy die Ausgabe im Fenster an und schreibt sie gleichzeitig in die Logdatei.
Variante 3: SendTo-Testvariante für Projektordner
Die Datei heißt:
009_sendto_backup_mit_datum_mit_log_test.bat
Diese Variante ist für das Windows-Menü Senden an gedacht.
Man kann einen oder mehrere Projektordner im Explorer markieren und an das Skript senden. Im Testmodus wird nur angezeigt, was kopiert würde.
Der komplette Code der SendTo-Testvariante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 009_sendto_backup_mit_datum_mit_log_test.bat
REM Beschreibung: Sichert uebergebene Projektordner in datierte Backupordner und schreibt ein Log.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
rem Name des Backup-Hauptordners innerhalb des jeweiligen Projektordners
set "BACKUP_HAUPTORDNER=Backups"
rem Ausschlusslisten vorbereiten
set "AUSGESCHLOSSENE_ORDNER="
set "AUSGESCHLOSSENE_DATEIEN="
rem Zusaetzliche Ordner ausschliessen
rem Jeder Ordner bekommt eine eigene Zeile.
rem Dadurch funktionieren auch Namen mit Leerzeichen.
call :ordner_ausschliessen "Temp"
call :ordner_ausschliessen "Cache"
call :ordner_ausschliessen "Alte Dateien"
rem Dateien oder Dateimuster ausschliessen
rem Hier koennen komplette Dateinamen oder Muster eingetragen werden.
call :datei_ausschliessen "desktop.ini"
call :datei_ausschliessen "thumbs.db"
call :datei_ausschliessen "*.tmp"
call :datei_ausschliessen "*.log"
call :datei_ausschliessen "*.bak"
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
if "%~1"=="" goto keine_parameter
echo SendTo Backup mit Datum wird vorbereitet...
echo.
echo Testmodus: %TESTMODUS%
echo Zeitstempel: %ZEITSTEMPEL%
echo.
echo Ausgeschlossene Ordner:
echo !AUSGESCHLOSSENE_ORDNER!
echo.
echo Ausgeschlossene Dateien / Dateimuster:
echo !AUSGESCHLOSSENE_DATEIEN!
echo.
if "%TESTMODUS%"=="JA" goto start
echo ACHTUNG: Dieses Skript erstellt jetzt wirklich Backups.
echo.
set /p "ANTWORT=Zum Fortfahren JA eingeben: "
if /i "%ANTWORT%"=="JA" goto start
echo.
echo Abgebrochen.
echo.
pause
exit /b
:start
echo.
:ordner_loop
if "%~1"=="" goto fertig
if exist "%~1\" goto ordner_verarbeiten
echo UEBERSPRUNGEN: "%~1" ist kein Ordner.
echo.
shift
goto ordner_loop
:ordner_verarbeiten
set "QUELLORDNER=%~1"
set "BACKUP_PFAD=%QUELLORDNER%\%BACKUP_HAUPTORDNER%"
set "ZIELORDNER=%BACKUP_PFAD%\Backup_%ZEITSTEMPEL%"
set "LOGDATEI=%ZIELORDNER%\backup_protokoll_%ZEITSTEMPEL%.log"
echo ============================================================
echo Ordner wird gesichert:
echo !QUELLORDNER!
echo.
echo Backup-Hauptordner:
echo !BACKUP_PFAD!
echo.
echo Zielordner:
echo !ZIELORDNER!
echo.
echo Logdatei:
echo !LOGDATEI!
echo ============================================================
echo.
if "%TESTMODUS%"=="JA" goto robocopy_test
if not exist "!BACKUP_PFAD!" mkdir "!BACKUP_PFAD!"
if not exist "!ZIELORDNER!" mkdir "!ZIELORDNER!"
robocopy "!QUELLORDNER!" "!ZIELORDNER!" /E /XJ /R:1 /W:1 /TEE /UNILOG:"!LOGDATEI!" /XD "!BACKUP_PFAD!" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
echo.
echo Backup wurde erstellt:
echo !ZIELORDNER!
echo.
echo Logdatei wurde erstellt:
echo !LOGDATEI!
echo.
shift
goto ordner_loop
:robocopy_test
echo Testmodus aktiv.
echo Es wird nur angezeigt, was kopiert wuerde.
echo Im Testmodus wird kein Backup-Ordner erstellt.
echo.
robocopy "!QUELLORDNER!" "!ZIELORDNER!" /E /L /XJ /R:1 /W:1 /XD "!BACKUP_PFAD!" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
echo.
echo Es wurde noch nichts kopiert.
echo.
shift
goto ordner_loop
:fertig
echo.
echo Fertig.
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurden keine Backups erstellt.
echo Wenn alles richtig aussieht, entferne _test aus dem Dateinamen.
) else (
echo Alle uebergebenen Ordner wurden verarbeitet.
)
echo.
pause
exit /b
:keine_parameter
echo Bitte sende einen oder mehrere Ordner an dieses Skript.
echo.
echo Du kannst im Explorer einen oder mehrere Ordner markieren,
echo dann Rechtsklick - Senden an verwenden.
echo.
pause
exit /b
:ordner_ausschliessen
set "AUSGESCHLOSSENE_ORDNER=!AUSGESCHLOSSENE_ORDNER! "%~1""
exit /b
:datei_ausschliessen
set "AUSGESCHLOSSENE_DATEIEN=!AUSGESCHLOSSENE_DATEIEN! "%~1""
exit /b
Code der SendTo-Testvariante erklärt
Prüfen, ob etwas übergeben wurde
if "%~1"=="" (
echo Bitte sende einen oder mehrere Projektordner an dieses Skript.
echo.
echo Du kannst im Explorer Ordner markieren,
echo dann Rechtsklick - Senden an verwenden.
echo.
pause
exit /b
)
Diese Prüfung stellt sicher, dass mindestens ein Ordner an das Skript übergeben wurde.
Mehrere Projektordner verarbeiten
:projekt_loop
if "%~1"=="" goto fertig
...
shift
goto projekt_loop
Mit dieser Schleife kann das Skript mehrere übergebene Projektordner nacheinander verarbeiten.
shift verschiebt die Parameter weiter. Dadurch wird nach dem ersten Ordner der nächste Ordner verarbeitet.
Prüfen, ob ein Ordner übergeben wurde
if not exist "%~1\" (
echo UEBERSPRUNGEN: "%~1" ist kein Ordner.
echo.
shift
goto projekt_loop
)
Diese Variante erwartet Ordner. Wenn ein übergebenes Element kein Ordner ist, wird es übersprungen.
Quelle aus SendTo übernehmen
set "QUELLE=%~1"
Bei der SendTo-Variante ist die Quelle nicht der aktuelle Ordner, sondern der übergebene Ordner aus dem Explorer.
Variante 4: SendTo-Backup mit Logdatei
Die Datei heißt:
009_sendto_backup_mit_datum_mit_log.bat
Diese Variante erstellt echte Backups für einen oder mehrere übergebene Projektordner und schreibt jeweils ein Protokoll in den passenden Backup-Ordner.
Der komplette Code der SendTo-Logvariante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 009_sendto_backup_mit_datum_mit_log.bat
REM Beschreibung: Sichert uebergebene Projektordner in datierte Backupordner und schreibt ein Log.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
rem Name des Backup-Hauptordners innerhalb des jeweiligen Projektordners
set "BACKUP_HAUPTORDNER=Backups"
rem Ausschlusslisten vorbereiten
set "AUSGESCHLOSSENE_ORDNER="
set "AUSGESCHLOSSENE_DATEIEN="
rem Zusaetzliche Ordner ausschliessen
rem Jeder Ordner bekommt eine eigene Zeile.
rem Dadurch funktionieren auch Namen mit Leerzeichen.
call :ordner_ausschliessen "Temp"
call :ordner_ausschliessen "Cache"
call :ordner_ausschliessen "Alte Dateien"
rem Dateien oder Dateimuster ausschliessen
rem Hier koennen komplette Dateinamen oder Muster eingetragen werden.
call :datei_ausschliessen "desktop.ini"
call :datei_ausschliessen "thumbs.db"
call :datei_ausschliessen "*.tmp"
call :datei_ausschliessen "*.log"
call :datei_ausschliessen "*.bak"
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
if "%~1"=="" goto keine_parameter
echo SendTo Backup mit Datum wird vorbereitet...
echo.
echo Testmodus: %TESTMODUS%
echo Zeitstempel: %ZEITSTEMPEL%
echo.
echo Ausgeschlossene Ordner:
echo !AUSGESCHLOSSENE_ORDNER!
echo.
echo Ausgeschlossene Dateien / Dateimuster:
echo !AUSGESCHLOSSENE_DATEIEN!
echo.
if "%TESTMODUS%"=="JA" goto start
echo ACHTUNG: Dieses Skript erstellt jetzt wirklich Backups.
echo.
set /p "ANTWORT=Zum Fortfahren JA eingeben: "
if /i "%ANTWORT%"=="JA" goto start
echo.
echo Abgebrochen.
echo.
pause
exit /b
:start
echo.
:ordner_loop
if "%~1"=="" goto fertig
if exist "%~1\" goto ordner_verarbeiten
echo UEBERSPRUNGEN: "%~1" ist kein Ordner.
echo.
shift
goto ordner_loop
:ordner_verarbeiten
set "QUELLORDNER=%~1"
set "BACKUP_PFAD=%QUELLORDNER%\%BACKUP_HAUPTORDNER%"
set "ZIELORDNER=%BACKUP_PFAD%\Backup_%ZEITSTEMPEL%"
set "LOGDATEI=%ZIELORDNER%\backup_protokoll_%ZEITSTEMPEL%.log"
echo ============================================================
echo Ordner wird gesichert:
echo !QUELLORDNER!
echo.
echo Backup-Hauptordner:
echo !BACKUP_PFAD!
echo.
echo Zielordner:
echo !ZIELORDNER!
echo.
echo Logdatei:
echo !LOGDATEI!
echo ============================================================
echo.
if "%TESTMODUS%"=="JA" goto robocopy_test
if not exist "!BACKUP_PFAD!" mkdir "!BACKUP_PFAD!"
if not exist "!ZIELORDNER!" mkdir "!ZIELORDNER!"
robocopy "!QUELLORDNER!" "!ZIELORDNER!" /E /XJ /R:1 /W:1 /TEE /UNILOG:"!LOGDATEI!" /XD "!BACKUP_PFAD!" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
echo.
echo Backup wurde erstellt:
echo !ZIELORDNER!
echo.
echo Logdatei wurde erstellt:
echo !LOGDATEI!
echo.
shift
goto ordner_loop
:robocopy_test
echo Testmodus aktiv.
echo Es wird nur angezeigt, was kopiert wuerde.
echo Im Testmodus wird kein Backup-Ordner erstellt.
echo.
robocopy "!QUELLORDNER!" "!ZIELORDNER!" /E /L /XJ /R:1 /W:1 /XD "!BACKUP_PFAD!" !AUSGESCHLOSSENE_ORDNER! /XF !AUSGESCHLOSSENE_DATEIEN!
echo.
echo Es wurde noch nichts kopiert.
echo.
shift
goto ordner_loop
:fertig
echo.
echo Fertig.
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurden keine Backups erstellt.
echo Wenn alles richtig aussieht, entferne _test aus dem Dateinamen.
) else (
echo Alle uebergebenen Ordner wurden verarbeitet.
)
echo.
pause
exit /b
:keine_parameter
echo Bitte sende einen oder mehrere Ordner an dieses Skript.
echo.
echo Du kannst im Explorer einen oder mehrere Ordner markieren,
echo dann Rechtsklick - Senden an verwenden.
echo.
pause
exit /b
:ordner_ausschliessen
set "AUSGESCHLOSSENE_ORDNER=!AUSGESCHLOSSENE_ORDNER! "%~1""
exit /b
:datei_ausschliessen
set "AUSGESCHLOSSENE_DATEIEN=!AUSGESCHLOSSENE_DATEIEN! "%~1""
exit /b
Wichtige Unterschiede der SendTo-Logvariante
Diese Variante kombiniert mehrere Funktionen:
- Ein oder mehrere Projektordner können per SendTo übergeben werden.
- Für jeden Projektordner wird ein eigener Backup-Ordner erstellt.
- Der Backup-Hauptordner wird automatisch angelegt.
- Der Backup-Hauptordner wird vom Kopieren ausgeschlossen.
- Das Protokoll wird im jeweiligen Backup-Ordner gespeichert.
Wie wird die SendTo-Variante eingerichtet?
Die SendTo-Batchdatei oder eine Verknüpfung davon kann in den Windows-Ordner Senden an gelegt werden.
Den SendTo-Ordner öffnet man mit:
shell:sendto
Danach kann man im Explorer einen oder mehrere Projektordner markieren und mit Rechtsklick > Senden an an das Skript übergeben.
Wichtig: Diese SendTo-Varianten erwarten Ordner. Dateien selbst werden übersprungen.
Was passiert im Testmodus?
Solange _test im Dateinamen steht, wird nur angezeigt, was kopiert würde.
Das passiert über die robocopy-Option:
/L
/L bedeutet: Nur auflisten, nicht kopieren.
Dadurch kann man sehr gut prüfen, welche Dateien und Ordner in das Backup aufgenommen würden, bevor wirklich kopiert wird.
Welche Ordner und Dateien werden ausgeschlossen?
Das Skript kann bestimmte Ordner und Dateien vom Backup ausschließen.
Der Backup-Hauptordner selbst wird immer ausgeschlossen, damit alte Backups nicht erneut in neue Backups kopiert werden.
Typische ausgeschlossene Ordner können sein:
Backups
Temp
Cache
Alte Dateien
Typische ausgeschlossene Dateien oder Muster können sein:
desktop.ini
thumbs.db
*.tmp
*.log
*.bak
Dadurch kann das Backup übersichtlicher bleiben und unnötige temporäre Dateien werden nicht mitkopiert.
Wichtige robocopy-Optionen
| Option | Bedeutung |
|---|---|
/E |
Kopiert Unterordner inklusive leerer Unterordner. |
/L |
Listet nur auf, was kopiert würde. Wird im Testmodus verwendet. |
/XJ |
Schließt Junction Points aus und verhindert mögliche Schleifen. |
/R:1 |
Versucht fehlgeschlagene Kopien nur einmal erneut. |
/W:1 |
Wartet bei Wiederholungen nur eine Sekunde. |
/XD |
Schließt Ordner aus. |
/XF |
Schließt Dateien oder Dateimuster aus. |
/TEE |
Zeigt die Ausgabe im Fenster und schreibt sie gleichzeitig ins Log. |
/UNILOG |
Schreibt das Log als Unicode-Datei. |
Warum wird kein /MIR verwendet?
/MIR ist eine robocopy-Option zum Spiegeln eines Ordners. Dabei können im Ziel auch Dateien gelöscht werden, wenn sie in der Quelle nicht mehr vorhanden sind.
Für Einsteiger-Backups ist das riskant. Deshalb wird hier bewusst nicht mit /MIR gearbeitet.
Dieses Skript erstellt einen neuen Backup-Ordner und kopiert Dateien hinein. Es löscht keine vorhandenen Dateien aus älteren Backups.
Typische Anpassungen
Name des Backup-Hauptordners
Der Name des Backup-Hauptordners kann im Skript angepasst werden:
set "BACKUP_ORDNER=Backups"
Beispiel:
set "BACKUP_ORDNER=Sicherungen"
Zusätzliche Ausschlüsse
Weitere Ordner oder Dateien können in den robocopy-Ausschlüssen ergänzt werden.
Beispiele:
/XD "Temp" "Cache" "Alte Dateien"
/XF "desktop.ini" "thumbs.db" "*.tmp" "*.log" "*.bak"
Bei Namen mit Leerzeichen sind Anführungszeichen besonders wichtig.
Häufige Fehler
Es wird nichts kopiert
Wenn _test im Dateinamen steht, ist das korrekt. Dann läuft das Skript im Testmodus und verwendet /L. Es wird nur angezeigt, was kopiert würde.
Der Backup-Ordner wird nicht mitkopiert
Das ist absichtlich so. Der Backup-Hauptordner wird ausgeschlossen, damit alte Backups nicht erneut in neue Backups kopiert werden.
Logdateien werden nicht mitkopiert
Wenn *.log in der Ausschlussliste steht, werden Logdateien bewusst nicht kopiert.
Die SendTo-Variante überspringt ein Element
Dann wurde wahrscheinlich eine Datei statt eines Ordners übergeben. Diese Varianten erwarten Projektordner.
Umlaute im Log sehen falsch aus
Die Log-Varianten verwenden /UNILOG, damit das Protokoll als Unicode-Datei geschrieben wird. Dadurch sind Umlaute normalerweise besser lesbar.
Was haben wir gelernt?
In diesem Teil wurden mehrere wichtige Batch- und robocopy-Grundlagen gezeigt:
robocopy kann Ordner zuverlässig kopieren.
/E kopiert Unterordner inklusive leerer Ordner.
/L erzeugt eine Vorschau ohne echtes Kopieren.
/XD schließt Ordner aus.
/XF schließt Dateien und Muster aus.
/UNILOG schreibt ein Unicode-Protokoll.
/TEE zeigt die Ausgabe an und schreibt sie ins Log.
%CD% steht für den aktuellen Ordner.
%~1 steht bei SendTo für den übergebenen Ordner.
shift verarbeitet mehrere übergebene Ordner nacheinander.
Zeitstempel können für eindeutige Backup-Ordner genutzt werden.
Damit ist dieses Skript-Paket ein sehr nützliches Werkzeug, um Projektordner mit Datum und Uhrzeit zu sichern und gleichzeitig nachvollziehbare Protokolle zu erzeugen.
Video zu diesem Tutorial:
Das könnte Dich auch interessieren
Keine Einträge gefunden

