Aleria 0 Geschrieben 27. April 2020 Melden Teilen Geschrieben 27. April 2020 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 :) Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 27. April 2020 Melden Teilen Geschrieben 27. April 2020 (bearbeitet) 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 27. April 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 27. April 2020 Melden Teilen Geschrieben 27. April 2020 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.