FOR x mal ausführen oder bis String in Datei gefunden wurde
Hallo zusammen,
Ich habe wieder einmal ein Fall den ich nicht hin kriege.
Muss ein Backup für eine Applikation schreiben und als letzter Test schaue ich in einem Log File ob er Eintrag "Server ready" vorhanden ist.
Ich möchte dies in einer FOR-Schleife machen und dabei x mal die Schleife durchlaufen und mittels findstr den Ausdruck "Server ready" suchen.
Wenn der Ausdruck vorhanden ist möchte ich jedoch direkt aus der FOR-Schleife heraus springen.
Habe mir so etwas vorgestellt. jedoch bekomme ich jedem Fall "Backup successful"
Vielen Dank, Ihr kreativen Köpfe
der FORzweifelte..
Ich habe wieder einmal ein Fall den ich nicht hin kriege.
Muss ein Backup für eine Applikation schreiben und als letzter Test schaue ich in einem Log File ob er Eintrag "Server ready" vorhanden ist.
Ich möchte dies in einer FOR-Schleife machen und dabei x mal die Schleife durchlaufen und mittels findstr den Ausdruck "Server ready" suchen.
Wenn der Ausdruck vorhanden ist möchte ich jedoch direkt aus der FOR-Schleife heraus springen.
Habe mir so etwas vorgestellt. jedoch bekomme ich jedem Fall "Backup successful"
echo on
echo %errorlevel%
FOR /L %%A IN (1,1,2) do (
findstr /I /S /C:"Server ready" *.log
echo %errorlevel%
if %errorlevel% == 0 goto success
timeout /T 2 /NOBREAK
)
echo %errorlevel%
:failed
set status=Backup failed
goto sendmail
:success
set status=Backup successful
goto sendmail
:sendmail
echo Der Status ist: %status%
pause
Vielen Dank, Ihr kreativen Köpfe
der FORzweifelte..
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 294488
Url: https://administrator.de/forum/for-x-mal-ausfuehren-oder-bis-string-in-datei-gefunden-wurde-294488.html
Ausgedruckt am: 17.04.2025 um 22:04 Uhr
2 Kommentare
Neuester Kommentar
Moin giadsc,
für den CMD-Interpreter ist die auf Zeile 04 bis Zeile 09 auseinandergezoge FOR-Anweisung nur EINE Befehlszeile.
Das heisst, alle Variablen in dieser Befehlzeile habe genau einen Wert, nämlich den Variablenwert bei Beginn der Ausführung dieser Befehlszeile.
Bei "Betreten" der FOR-Anweisung ist aber der %errorlevel% gleich 0, und daran ändert sich auch in der Rumkreiserei in den Zeilen 05-08 nix.
Abhilfe:
a) Über Setlocal EnableDelayedExpansion ( siehe Forumssuche)
und Abfrage
b) über Abfrage
c) über
oder d) Verzicht auf die FOR-Anweisung.
Denn was soll es... wieso sollte FINDSTR beim ersten Lesen der *.log-Files weniger "server ready"-Zeilen Finden als beim siebten Durchlauf?
Entweder es steht nach dem Backup im Logfile oder eben nicht.
Also prüfe doch den %errorlevel% ohne FOR-Anweisung.
Grüße
Biber
für den CMD-Interpreter ist die auf Zeile 04 bis Zeile 09 auseinandergezoge FOR-Anweisung nur EINE Befehlszeile.
Das heisst, alle Variablen in dieser Befehlzeile habe genau einen Wert, nämlich den Variablenwert bei Beginn der Ausführung dieser Befehlszeile.
Bei "Betreten" der FOR-Anweisung ist aber der %errorlevel% gleich 0, und daran ändert sich auch in der Rumkreiserei in den Zeilen 05-08 nix.
Abhilfe:
a) Über Setlocal EnableDelayedExpansion ( siehe Forumssuche)
und Abfrage
if !errorlevel!== 0 goto :allesprima
statt if %errorlevel%== 0 goto :allesprima
b) über Abfrage
if not errorlevel 1 goto :allesprima
statt if %errorlevel%== 0 goto :allesprima
c) über
findstr /I /S /C:"Server ready" *.log >nul && goto :allesprima
statt der Prüfung der Variablen %errorlevel%oder d) Verzicht auf die FOR-Anweisung.
Denn was soll es... wieso sollte FINDSTR beim ersten Lesen der *.log-Files weniger "server ready"-Zeilen Finden als beim siebten Durchlauf?
Entweder es steht nach dem Backup im Logfile oder eben nicht.
Also prüfe doch den %errorlevel% ohne FOR-Anweisung.
Grüße
Biber