Jump to content

Problem bei For Findstr und errorlevel


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

kurz zu dem, was ich mit der Batch erreichen möchte:

Ich versuche anhand einer Liste (txt Datei) zeilenweise die Einträge in einer anderen Liste (txt Datei) zu finden.

 

Wenn die Einträge gefunden werden, geh zu OK und mach damit weiter was danach kommt.

Wenn die Einträge nicht gefunden werden, dann geh zu NOK und schreibe eine Datei.

 

Ich hab dabei schon folgenden Code gebastelt:

@echo off

set Datei=C:\temp\test.txt
set TransLog=C:\temp\TransLog.txt
set PruefNOK=C:\temp\PruefNOK.txt
set PruefOK=C:\temp\PruefOK.txt

for /f %%a in (%Datei%) do (
	findstr /i %%a %TransLog%
	echo %errorlevel%
	if errorlevel == 1 (echo %%a no files found %errorlevel% goto NOK >> %PruefNOK%)
	if errorlevel == 0 (echo %%a files found %errorlevel% goto OK >> %PruefOK%)
	)


:NOK
echo Nicht alles ok >> %PruefNOK%
exit

:OK
echo Alles OK >> %PruefOK%
exit

Die ganzen Echos und, dass er alles in die Dateien schreiben soll, habe ich zu Kontrollzwecken eingebaut, um mir den Ablauf in der CMD anzuschauen.

 

Mal funktioniert das Script und mal nicht:

Wenn eine Zeile in der Ausgangsdatei (Datei) ist, aber im Translog nicht, führt er die zwar im NOK Log auf, aber genauso im OK Log. Das Errorlevel ist 0 und es werden auch zwei Log Dateien geschrieben.

Wenn die Zeilen aus der Ausgangsdatei alle gefunden wurden, dann schreibt er sie ins OK-Log, schreibt aber auch ein NOK-Log. Auch hier werden wieder zwei Logs geschrieben und das Errorlevel ist weiterhin 0.

 

Mir scheint es ein wenig so, dass die goto komplett ignoriert werden.

 

Ich hoffe ich konnte es einigermaßen verständlich erklären.

Kann mir hier einer weiterhelfen?

 

Vielen Dank.

 

 

Hat sich erledigt...

Hatte einen ordentlichen Denkfehler...

 

Trotzdem danke :)

Link zu diesem Kommentar
vor 25 Minuten schrieb Aleria:
 

Hatte einen ordentlichen Denkfehler...

 ... und grad wollt ich antworten ... 

 

Teilst Du uns vielleicht auch noch mit, was das Problem war? ... das hilft vielleicht anderen ...

 

Für CMD bin ich zu doof aber mit Powershell könnte man's so machen:

$ContentTest = Get-Content -Path C:\temp\test.txt
$ContentTranslog = Get-Content -Path C:\temp\translog.txt
Compare-Object -ReferenceObject  $ContentTest -DifferenceObject $ContentTranslog -IncludeEqual -OutVariable Result
$Result | 
    Where-Object -Property SideIndicator -EQ -Value '==' |
        Select-Object -ExpandProperty InputObject |
            Out-File -FilePath C:\temp\PruefOK.txt -Append
$Result |
    Where-Object -Property SideIndicator -NE -Value '==' |
        Select-Object -ExpandProperty InputObject |
            Out-File -FilePath C:\temp\PruefNOK.txt -Append

 

bearbeitet von BOfH_666
Link zu diesem Kommentar

Im :NOK Block landet das Skript auf jeden Fall, unvermeidbar... Ich würde hier exzessiv Call und Goto :EOF verwenden, um genau so was zu vermeiden - wenn es denn schon Batch sein muß ("exit" übrigens gar nicht, denn "exit" beendet die aufrufende cmd.exe, das finde ich persönlich lästig...).

Powershell ist natürlich eleganter. Der Code dürfte anders aussehen, wenn man wüßte, was genau eigentlich das Ziel ist :-)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...