Skript

@echo off
set "LW="
if not exist c:\SKSoft md c:\SKSoft && md c:\SKSoft\log

REM Wochentag definieren
set DOW=
for /f %%g in ('wmic path win32_localtime get dayofweek^|findstr /v /r "^$"') do (set DOW=%%g)
If %dow% equ 1 set "WoTa=Montag"
If %dow% equ 2 set "WoTa=Dienstag"
If %dow% equ 3 set "WoTa=Mittwoch"
If %dow% equ 4 set "WoTa=Donnerstag"
If %dow% equ 5 set "WoTa=Freitag"
If %dow% equ 6 set "WoTa=Samstag"
If %dow% equ 7 set "WoTa=Sonntag"


:MONDEF

REM MONAT DEFINIEREN

set MONTH=%date:~-7,2%
If %MONTH% equ 1 set "MONAT=Jan"
If %MONTH% equ 2 set "MONAT=Feb"
If %MONTH% equ 3 set "MONAT=Mrz"
If %MONTH% equ 4 set "MONAT=Aprl"
If %MONTH% equ 5 set "MONAT=Mai"
If %MONTH% equ 6 set "MONAT=Jun"
If %MONTH% equ 7 set "MONAT=Jul"
If %MONTH% equ 8 set "MONAT=Aug"
If %MONTH% equ 9 set "MONAT=Sep"
If %MONTH% equ 10 set "MONAT=Okt"
If %MONTH% equ 11 set "MONAT=Nov"
If %MONTH% equ 12 set "MONAT=Dez"


REM Den letzten Freitag definieren:
@echo off&setlocal
set /a dd=100%date:~-10,2%%%100,mm=100%date:~-7,2%%%100,åå=%date:~-4%
set /a z=14-mm,z/=12,y=åå+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1

REM 5 steht für Freitag, 0 für Montag, 7 für Sonntag
if not %dow% equ 5 goto :QBEGIN

set /a "Februar = 22 + ( åå / 4- ( åå - 1 ) / 4  - ( åå / 100 - ( åå - 1 ) / 100) + ( åå / 400 - ( åå - 1 ) / 400 ) )" 
set "OK="
if %mm% equ 2 if %dd% geq %Februar% set "OK=1" && goto :QBEGIN
for %%i in (1 3 5 7 8 10 12) do if %%i equ %mm% if %dd% geq 25 set "OK=1"
for %%i in (2 4 6 9 11) do if %%i equ %mm% if %dd% geq 24 set "OK=1"
if not defined OK goto :QBEGIN


:QBEGIN
del %userprofile%\99laufs99.txt > NUL 2> NUL
del %userprofile%\99lauf99.txt > NUL 2> NUL
del %userprofile%\99drive99.txt > NUL 2> NUL
del %userprofile%\99drives99.txt > NUL 2> NUL
CLS
IF defined OK goto :MONTXT
@echo Mit der %WoTa% 's Sicherung kann begonnen werden.
@echo Abhaengig von der Menge der Sicherungsdaten kann es eine Weile dauern.
@echo Die Datensicherung kann mit den Tasten "Strg" + "C" abgebrochen werden...
goto DIENST

:MONTXT
@echo Es sollte der letzte Freitag im Monat sein. Bitte stecken Sie
@echo den USB Stick fuer die Monatssicherung ein.
@echo Die Sicherung fuer den Monat %MONAT% kann begonnen werden.
@echo Die Datensicherung kann mit den Tasten "Strg" + "C" abgebrochen werden...

:DIENST
pause
REM Dienst überprüfen
cls
@echo off
qprocess * | find /I "wkflsr32.exe" >NUL
IF NOT ERRORLEVEL 1 GOTO QSTART
qprocess * | find /I "wkfbu32.exe" >NUL
IF NOT ERRORLEVEL 1 GOTO QSTART
goto :Qexit

:QSTART
@echo Das Programm laeuft leider noch. Bitte beenden Sie das Programm
@echo sonst kann mit der Datensicherung nicht begonnen werden ...
@echo Die Datensicherung kann mit den Tasten "Strg" + "C" abgebrochen werden...
pause
goto QBEGIN

:Qexit

REM USB Laufwerke auslesen

@echo off
cls
type NUL >%userprofile%\99laufs99.txt
type NUL >%userprofile%\99drives99.txt
for /L %%a in (9,-1,0) do wmic logicaldisk where drivetype=2 get name,size | find "%%a" >>%userprofile%\99drives99.txt
type %userprofile%\99drives99.txt >%userprofile%\99drive99.txt
FOR /F "tokens=1" %%a in (%userprofile%\99drive99.txt) do (
FINDSTR "%%a" %userprofile%\99laufs99.txt >NUL || echo %%a >>%userprofile%\99laufs99.txt
)
type %userprofile%\99laufs99.txt > %userprofile%\99lauf99.txt
REM USB Laufwerke zählen
Set /A Counter=0
FOR /F %%A IN (%userprofile%\99lauf99.txt) DO SET /A Counter+=1
IF %Counter% == 0 goto KeinUSB
IF NOT %Counter% == 1 goto counter
goto copy

:KeinUSB
@echo Es sind keine USB Sticks fuer die Datensicherung eingesteckt.
@echo Bitte stecken Sie den USB Stick fuer die Datensicherung ein!
pause
goto QBEGIN

:counter
cls
@echo Es sind mehr als 1 USB Stick oder andere Speicherkarten eingesteckt.
@echo Bitte entfernen Sie alle USB Stick's oder Speicherkarten aus dem
@echo Kartenlesegeraet (sofern vorhanden) und stecken Sie nur den USB
@echo Stick fuer die Datensicherung ein.
pause
goto QBEGIN

pause

:copy
FOR /F "eol=: tokens=1 delims= " %%i in (%userprofile%\99lauf99.txt) do (
set "LW=%%i"
)
IF defined OK goto :MONATSIK
IF NOT EXIST "%LW%\%WoTa%\" goto full

REMKopiere definierte Ziele auf den USB Stick
for %%k in (C:\CG\CMS) do xcopy "%%k" "%LW%\%WoTa%\" /S /E /C /H /R /Y /D /V
if errorlevel 0 @echo %WoTa% %date% - Die Tagessicherung %WoTa% wurde erfolgreich durchgefuehrt um %time% - >>"c:\SKSoft\log\log.txt" && @echo %WoTa% %date% - Die Tagessicherung %WoTa% wurde erfolgreich durchgefuehrt um %time% - >>"%LW%\log.txt"
@echo Nur die veraenderten Daten wurden auf dem Laufwerk %LW% im Verzeichnis %WoTa%
@echo gesichert.
goto ende

:full
for %%k in (C:\CG\CMS) do xcopy "%%k" "%LW%\%WoTa%\" /S /Y
if errorlevel 0 @echo %WoTa% %date% - Die Komplettsicherung %WoTa% wurde erfolgreich durchgefuehrt um %time% - >>"c:\SKSoft\log\log.txt" && @echo %WoTa% %date% - Die Komplettsicherung %WoTa% wurde erfolgreich durchgefuehrt um %time% - >>"%LW%\log.txt"
@echo Es wurde eine Komplettsicherung auf dem Laufwerk %LW% im Ordner %WoTa%
@echo durchgefuehrt.
goto ende

:MONATSIK
for /f "tokens=1,2,3 delims=. " %%a in ('date /t') do set JAHR=%%c
for %%u in (C:\CG\CMS) do xcopy "%%u" "%LW%\%JAHR%\%MONAT%\" /S /Y
if errorlevel 0 @echo %MONAT% %date% - Die Komplettsicherung für Monat %MONAT% wurde erfolgreich durchgefuehrt um %time% - >>"c:\SKSoft\log\log.txt" && @echo %MONAT% %date% - Die Komplettsicherung für Monat %MONAT% wurde erfolgreich durchgefuehrt um %time% - >>"%LW%\log.txt"
@echo Es wurde eine Komplettsicherung auf dem Laufwerk %LW% im Ordner %LW%\%JAHR%\%MONAT%\
@echo durchgefuehrt.

:ende

pause