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-Key: 2085079035

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

Printed on: April 25, 2024 at 06:04 o'clock

Member: SlainteMhath
SlainteMhath Mar 07, 2022 at 12:22:07 (UTC)
Goto Top
Moin,

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

lg,
Slainte
Member: TK1987
TK1987 Mar 07, 2022 at 12:23:26 (UTC)
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
Member: Bommi1961
Bommi1961 Mar 07, 2022 at 12:47:20 (UTC)
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