Пакетная строка abschneiden в if-условии - PullRequest
0 голосов
/ 11 января 2019

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 Сценарий:

...


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 ювелирные изделия 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 монахиня "XXXXXX.yyyy-mm-dd.log: ~ 0, -6" mit "XXXXXX.% Deljahr% -% delmonat%".

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

Vielen Dank für eure Hilfe.

1 Ответ

0 голосов
/ 11 января 2019
@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"
)

Примечание: если вывод соответствует вашим потребностям, удалите ECHO, чтобы включить команду del.

Примечание: требуется отсроченное расширение .

Если вы ленивый, вы можете заменить полный цикл for просто:

del "XXXXXX.%dat%-*.log"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...