southtom
Goto Top

Code in der CMD läuffähig, als batch nicht

Hallo zusammen,

ich bin in CMD und batch Neuling, leider kann ich kein Powershell nutzen.
Ich will in einem Ornder alle Daten älter als eine Woche löschen (später in Aufgabenplanung), wenn der Speicher weniger als 50% ist.
Mein Code funktioniert, wenn ich es Zeilenweise in die CMD eingebe. Erstelle ich eine batch, wird nichts ausgeführt. Ich hab gelesen, das Variablen mit %% gekennzeichnet werden müssen. Das habe ich getan, dennoch in der batch keine Reaktion. Kann mir hier jemand helfen?

@echo off

REM Laufwerk
SET "drive=C:"  

REM Ordnerpfad
SET "folder=C:\User\Downloads"  

REM Prozent restspeicher Marke
SET "percent=50"  

REM Zeitraumbegrenzung
SET "days=7"  

REM Zahlen abschneiden auf 4 Stellen
SET New_StrLength=4

REM Ermitteln FREIER Speicher D:
@for %%a in (%drive%) do @for /f "tokens=3" %i in ('dir /-c %%a^:^|find /i "Bytes fre"') do set drive_free=%%i  
REM Ergebnis abschneiden, erste 4 Stellen
call set drive_free=%drive_free:~0,^%New_StrLength%%

REM Ermitteln GESAMTER Speicher D:
SET drive_size=
@for /f "skip=1 delims=" %%A in ('wmic logicaldisk where DeviceID^="D:" get size') do (if not defined drive_size set "drive_size=%%A")  
REM Ergebnis abschneiden, erste 4 Stellen
call set drive_size=%drive_size:~0,^%New_StrLength%%

REM nun die gerundete Zahl Gesamtspeicher auf 20 Prozent rechnen
set /a result=(drive_size/100)*%percent%

echo Size: %drive_size%
echo Free: %drive_free%
echo Erg: %result%

REM Überprüfen, ob der verfügbare Speicherplatz unterhalb der Schwelle liegt
if %result% lss %drive_free% (
    REM Löschen von Dateien, die älter als 14 Tage sind
    forfiles /p "%folder%" /s /m * /d -%days% /c "cmd /c if @isdir==FALSE del @path"  
)

Content-ID: 7263974834

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

Ausgedruckt am: 24.11.2024 um 15:11 Uhr

S4ndwichmaker
S4ndwichmaker 22.05.2023 um 13:39:57 Uhr
Goto Top
Erstelle eine Batch und führe diese mittels einer weiteren CMD Box aus, wenns zu Fehlern kommt werden diese dann dort ausgegeben.

VG
NikosLykos
Lösung NikosLykos 22.05.2023 um 14:00:47 Uhr
Goto Top
Hallo SouthTom,

erstens:
19 @for %%a in (%drive%) do @for /f "tokens=3" %%i in ('dir /-c %%a^:^|find /i "Bytes fre"') do set drive_free=%%i

zweitens:
21 call set drive_free=%%drive_free:~0,%New_StrLength%%%
27 call set drive_size=%%drive_size:~0,%New_StrLength%%%

siehe auch How-to: Extract part of a variable (substring)

Grüße
SouthTom
SouthTom 22.05.2023 um 15:59:28 Uhr
Goto Top
Danke euch Beiden für die schnelle Hilfe, was ein Zeichen doch bewirken kann ^^
19 verpeilt und 21 & 27 nicht als notwendig gesehen.
CMD als Fehleranzeige auch sehr hilfreich.