-3

ich bin gerade dabei eine Batch Datei zu erstellen, die folgendes tun soll:

Auf dem PC liegen Logfiles, welche nach dem Muster XXXXXX.yyyy-mm-dd.log bezeichnet sind - Diese unterscheiden sich lediglich durch die Angabe yyy-mm-dd. Ich möchte immer den vorletzten Monat komplett löschen. Hier ein Auszug aus meinem Skript:

...


set /A delmonat = %monat%
set /A deljahr = %jahr%

for /f "delims=" %%a in ('dir /b /A-D ^| findstr /r "^XXXXXX.....-..-.." 2^>nul') DO (
if "%%a:~0,-6" EQU "XXXXXX.%deljahr%-%delmonat%" (del /q "%%a")
)

Er soll die jeweils ausgelesene Datei durch die Anweisung "%%a:~0,-6" von rechts um sechs Stellen kürzen und danach mit dem String "XXXXXX.%deljahr%-%delmonat%" vergleichen.

Aber er versteht die Anweisung "%%a:~0,-6" irgendwie nicht. Er vergleicht nun "XXXXXX.yyyy-mm-dd.log:~0,-6" mit "XXXXXX.%deljahr%-%delmonat%".

Wie erreiche ich es, dass in der If-Bedingung gleich der String abgeschnitten wird und mit der rechten Seite anschließend verglichen wird?

Vielen Dank für eure Hilfe.

Joh316
  • 1
  • 2
  • 3
    Please re-write you question in english – Abaddon666 Jan 11 '19 at 10:02
  • 1
    Substring-Substitution funktioniert nicht mit `for` Variablen. Du mußt eine "normale" Variable setzen und `:~0,-6` dann mit dieser durchführen. [Achtung Fallstrick](https://stackoverflow.com/a/30284028/2152082) (and next time, please in English) – Stephan Jan 11 '19 at 10:23
  • Obwohl `set /A` Leerzeichen um das `=` herum toleriert, sollte man sich das abgewöhnen. Außerdem `set /A delmonat=monat,deljahr=jahr`. Kompetente Deutsche Hlfe findest du auf https://administrator.de/thema/batch-shell-1101995812.html –  Jan 11 '19 at 10:36
  • 1
    I'm voting to close this question as off-topic because it is not english, as per site requirements. – Gerhard Jan 11 '19 at 10:47

1 Answers1

0
@echo off
setlocal enabledelayedexpansion
REM create testfiles:    
break>"XXXXXX.2018-11-23.log"
break>"XXXXXX.2018-12-18.log"

REM use Powershell to get the desired month (today - two months):
for /f "usebackq" %%a in (`"powershell (Get-Date).AddMonths(-2).ToString('yyyy-MM')"`) do set "dat=%%a"

for /f "delims=" %%a in ('dir /b /A-D ^| findstr /r "^XXXXXX\.....-..-..\.log" 2^>nul') DO (
  set "var=%%~na" 
  if "!var:~0,-3!" equ "XXXXXX.%dat%" ECHO del "%%a"
)

Note: if the output fits your needs, remove the ECHO to enable the del command.

Note: delayed expansion is needed.

If you are lazy, you can replace the complete for loop with just:

del "XXXXXX.%dat%-*.log"
Stephan
  • 53,940
  • 10
  • 58
  • 91