PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : findstr & errorlevel in einer DOS Batchdatei


WhiteVelvet
2012-04-03, 11:48:13
Hallo zusammen,

ich möchte über ein Script versuchen, einige txt-Datei nach einem bestimmten String "eof" abzufragen. Das mache ich so:


for %%f in (%loc_trns%\*.txt) do (
findstr /m "eof" %%f
if %errorlevel% == 0 echo %%f contains eof
)


Ich bin im korrekten Verzeichnis und sehe meine 4 Testdateien. In der Datei Nummer 3 fehlt dieses eof testweise. Er erkennt es aber nicht! Er schreibt mir 4x das echo in die Shell! Als wenn der Errorlevel IMMER 0 ist, obwohl eines der findstr einen Fehler ausspucken müsste. Übersehe ich hier was?

Gast
2012-04-03, 13:11:27
Einfach mal die Ausgabe nach findstr rausnehmen -> da Findstr selbst bereits die Dateien ausgibt und kein Errorlevel bei nichtfinden von "eof" produziert.


for %%f in (*.txt) do (
findstr /m "eof" %%f
rem if %errorlevel% == 0 echo %%f contains eof
)

Gast
2012-04-03, 13:21:41
Was auch geht


for %%f in (*.txt) do (
findstr /m "eof" %%f
if NOT ERRORLEVEL 1 echo %%f contains eof
)


Offensichtlich wird in einer FOR-Schleife die Variable %errorlevel% nur einmal aufgelöst und nicht dynamisch. Nachzulesen hier: http://www.administrator.de/index.php?content=134937

WhiteVelvet
2012-04-03, 13:51:17
Danke für die Beiträge... habs gefunden...

Aus irgendwelchen Gründen muss ich ein nacktes Errorlevel benutzen, ohne % und ohne ! was auch eine Alternative gewesen wäre. Hat irgendwas mit Delayed Expansion zutun wie es in dem Link des Gastes auch gesagt wird, habs noch nicht so genau durchblickt. Aber jetzt gehts :)