bommi1961
Goto Top

Fehler bei for (in einem CMD Skipt)

Hallo zusammen,

ich muss eine Tägliche Sicherung von einem Verzeichnis auf deinem Server Erstellen.
Dazu erstelle ich mit Robocopy eine Sicherung in ein Verzeichnis mit Tagesdatum. Nach 3 Tagen soll das älteste Verzeichnis gelöscht werden.

Diese Skip habe ich erstellt:

@echo on

rem ######################################### Anfang Konfiguration

REM Testverzeichnis
set quelle=C:\Temp
set ziel=w:\Backup\test1


REM #### Anzahl der BACKUPs die aufgehoben werden. ####
set anzahlBackups=3

rem ######################################### Ende Konfiguration


if exist "%ziel%\%date%" exit

echo Backup startet... %ziel%\%date%


if not exist "%quelle%" (
ECHO "ERROR: Quelle exsistiert nicht"
exit
)

if not exist "%ziel%\%date%" md "%ziel%\%date%"
for /F "tokens=2 delims=." %%i in ("%date%") DO (set month=%%i)
for /F "tokens=3 delims=." %%i in ("%date%") DO (set jear=%%i)
title BackUp ist gestartet
if not exist "%ziel%\%date%\*.%month%.%jear%" (
Echo Erstelle vollstandiges Backup fur diesen Monat
robocopy "%quelle%" "%ziel%\%date%" /MIR /tee /log:"%ziel%\%date%\BackUp_%date%.log"
) else (
echo Aktualisiere das Backup von diesem Monat
move "%ziel%\%date%\*.%month%.%jear%" "%ziel%\%date%" > NUL
if not exist "%ziel%\BackUp_%date%.log" echo %date% > "%ziel%\BackUp_%date%.log"
robocopy "%quelle%" "%ziel%\%date%" /MIR /tee /log+:"%ziel%\BackUp_%date%.log"
)
echo Losche alte BackUps
:ende

for /f "skip=%anzahlBackups% delims=" %F% in ('dir /B /O-D /A:D %ziel%') do rd /s /q "%ziel%\%F%"


exit

Das Sichern funktioniert einwandfrei aber leider nicht das löschen des Verzeichnis.

Was mache ich hier falsch?


VG
Thilo

Content-ID: 2085079035

Url: https://administrator.de/contentid/2085079035

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

SlainteMhath
SlainteMhath 07.03.2022 um 13:22:07 Uhr
Goto Top
Moin,

setz den Code doch bitte in code-Tags, so ist das schlecht lesbar.

lg,
Slainte
TK1987
TK1987 07.03.2022 um 13:23:26 Uhr
Goto Top
Moin Thilo,

bitte immer Codetags nutzen.

Zitat von @Bommi1961:
if exist "%ziel%\%date%" exit  
[...]
if not exist "%ziel%\%date%" md "%ziel%\%date%"  
das "if not exist" kannst du dir hier schenken, da das Skript ja längst beendet wurde, falls der Ordner existiert.

for /F "tokens=2 delims=." %%i in ("%date%") DO (set month=%%i)  
for /F "tokens=3 delims=." %%i in ("%date%") DO (set jear=%%i)  

das geht einfacher:
set month=%date:~3,2%
set year=%date:~-4%

Das Sichern funktioniert einwandfrei aber leider nicht das löschen des Verzeichnis.

Was mache ich hier falsch?
for /f "skip=%anzahlBackups% delims=" %F% in ('dir /B /O-D /A:D %ziel%') do rd /s /q "%ziel%\%F%"  
Deine Schleifenvariable ist falsch. Die muss natürlich %%F lauten, nicht %F%

Gruß Thomas
Bommi1961
Bommi1961 07.03.2022 um 13:47:20 Uhr
Goto Top
Hallo Thomas,

jetzt löscht er immer das gerade erstelle Verzeichnis.

@echo on
rem Author: T.B.
rem ######################################### Anfang Konfiguration

set quelle=C:\Temp
set ziel=w:\Backup\test1


REM #### Anzahl der BACKUPs die aufgehoben werden. ####
set anzahlBackups=3


REM #####################
REM ####### ZEIT fest legen

set month=%date:~3,2%
set year=%date:~-4%

rem ######################################### Ende Konfiguration


if exist "%ziel%\%date%" exit

echo Backup startet... %ziel%\%date%


if not exist "%quelle%" (
ECHO "ERROR: Quelle exsistiert nicht"
exit
)


REM BackUp ist gestartet
if not exist "%ziel%\%date%\*.%month%.%jear%" (
Echo Erstelle vollstandiges Backup fur diesen Tag
robocopy "%quelle%" "%ziel%\%date%" /MIR /tee /log:"%ziel%\%date%\BackUp_%date%.log"
) else (
echo Aktualisiere das Backup von diesem Monat
move "%ziel%\%date%\*.%month%.%jear%" "%ziel%\%date%" > NUL
if not exist "%ziel%\BackUp_%date%.log" echo %date% > "%ziel%\BackUp_%date%.log"
robocopy "%quelle%" "%ziel%\%date%" /MIR /tee /log+:"%ziel%\BackUp_%date%.log"
)
echo Losche alte BackUps


for /f "skip=%anzahlBackups% delims=" %%F in ('dir /B /O-D /A:D %ziel%') do rd /s /q "%ziel%\%%F"

exit

So wie es aussieht wird die Varialbe F nicht erkannt als solche Siehe Anhang.
cmd_fehler