andynix

Variable addieren (%%i und %%i=2 auch wenn der Inhalt 0 ist)

geschlossengelöstFrageBatch, Shell Entwicklung
Log Datei auslesen - nur bei Fehlern melden

Hallo zusammen,
ich habe eine kleinen Batchdatei die mit ROBOCOPY kleines Backup fährt. Eine Logdatei wird dabei auch erstellt - er liest sie aber ?
Deswegen möchte ich dass eine Meldung kommt oder später etwas zur mir geschickt wird.

Es sieht wie folgt aus:

@echo off
for /F "Tokens=6 Delims= " %%i in ('type log.txt^|Find "Dirs"') do ( IF NOT %%i==0 set "fehler=%%i+%%i" )
echo %fehler%
if not %fehler%==0 goto fehler
echo Alles OK
goto :eof

:fehler
color c
title Achtung es sind Fehler aufgetreten
echo Überprüfe das Protokoll !

Das Problem liegt wohl in der fett geschriebenen Klammer ?
Bin für jede Hilfe dankbar.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 46937

Url: https://administrator.de/forum/variable-addieren-i-und-i-2-auch-wenn-der-inhalt-0-ist-46937.html

Ausgedruckt am: 24.07.2025 um 15:07 Uhr

bastla
bastla 17.12.2006 um 21:18:59 Uhr
Hallo Andynix!

Versuch es mal statt der ersten beiden Zeilen so (dass die "type|find"-Kombination den richtigen Wert liefert, setze ich voraus):
@echo off & setlocal enabledelayedexpansion
set fehler=0
for /f "tokens=6 delims= " %%i in ('type log.txt^|find "Dirs"') do set /a fehler=!fehler!+%%i  

HTH
bastla
Biber
Biber 18.12.2006 um 07:37:51 Uhr
Moin Andynix,
nur als Fussnote zu bastla's Lösung.

In diesem Fall kannst Du es auch ohne die "DelayedExpansion" abfackeln

@echo off & setlocal
for /f "tokens=6 delims= " %%i in ('type log.txt^|find "Dirs"') do set /a fehler+=%%i  
...

Grüße
Biber
Andynix
Andynix 18.12.2006 um 09:41:14 Uhr
viellen Dank euch beiden,
beide Lösungen gehen, ich bevorzuge aber den Bieber.

Frage Nr.2 (aber auch zum Thema)
Kann ich beiden Spalten (Mismatch, FAILED) im einen rutsch auswerten ?

Total Copied Skipped Mismatch FAILED Extras
Dirs : 147 146 1 1 1 0
Biber
Biber 18.12.2006 um 14:21:23 Uhr
Moin Andynix,

Oh ja, da gibt es sogar eine kleine feine undokumentierte Syntax aus meinem Fundus für Dich:

@echo off & setlocal
for /f "tokens=5,6 delims= " %%i in ('type log.txt^|find "Dirs"') do set /a "cntMismatch+=%%i, cntFailed+=%%j"  

REM danach steht in %cntMismatch% die Summe-Anzahl-Mismatched und in %cntFailed% die Summe-Anzahl-Failed%.
...

...weil bald Weihnachten is'...


Gruß
Biber
Andynix
Andynix 19.12.2006 um 08:39:09 Uhr
...
:AUSWERTUNG
for /f "tokens=6,7 delims= " %%i in ('type F:\log.txt^|find "Dirs"') do set /a "cntMismatch+=%%i, cntFailed+=%%j"  
if not %cntMismatch%==0 goto FEHLER
if not %cntFailed%==0 goto FEHLER
...

...bin echt froh, dass ich die Frage kurz vor Weihnachten los bin (sonst bekämme ich womöglich keine Antwort face-smile
Es muss jedoch tokens=6,7 heißen.

...schöne Feiertage !...