mikrocontroller.net

Forum: PC-Programmierung Win Batch if exist und findstr


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hab ein Problem die Batch funtioniert nicht so wie gedacht...

Das findstr oder das Auslesen vom %errorlevel% wird nicht wie erwartet 
ausgeführt…

Das 1. findstr & errorlevelvor der if exist Anweisung werden wie 
erwartet ausgeführt/gesetzt.
Das 2. findstr in der if exist Anweisung wird nicht ausgeführt  oder die 
Var errorlevel werde nicht richtig gesetzt.
Das einzige was ich sehe ist dass das errorlevel in der if immer 0 ist. 
Unabhängig davon ob das gesuchte Wort in der Datei enthalten ist oder 
nicht.

Was muss gemacht damit der Code in der if Bedingung seinen zweck 
erfühlt?

Die report.txt Datei befindet sich im gleichen Ordner wie die Batch.

--------------
echo off
set FL=D:/
rem 1. find
findstr /m "FAILED failed" report.txt
echo %errorlevel%

if exist %FL% (
    rem 2. find
    findstr /m "FAILED failed" report.txt
    echo %errorlevel%
    if %errorlevel%==0 (
        COLOR 4F
    ) else (
        COLOR 2F
    )
) else (
    COLOR 7F
    echo.
    echo Pfad nicht gefunden.
    echo.
)
pause

Autor: Thorsten W. (hologram73)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
set FL=D:/ ??????????

muss das nicht heißen: set FL=D:\

VG

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ja hast recht, habs übersehen.

Ändert aber nichts am verhalten. :(

Autor: Thorsten W. (hologram73)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
habe es gerade mal getestet.

Wenn LW D:\ nicht existent ist, dann wird es grau mit der Meldung "Pfad 
nicht gefunden".

Existiert die report.txt und der String "FAILED" oder "failed" 
existiert, wird es grün und wenn der String nicht enthalten wird wirds 
rot.

oder verstehe ich hier das Problem nicht????

VG

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe.

Ja, wird der Pfad nicht gefunden soll die Meldung angezeigt werden.

Aber ist "FAILED" oder "failed" nicht enthalten soll es grün werden.
Das funktioniert auch.
Im Grunde hab ich nur die funktionierende Batch erweitert. Danach 
funktionierte sie nicht mehr...

So funktioniert es
-----------------------------
echo off
findstr /m "FAILED failed" report.txt
echo %errorlevel%
if %errorlevel%==0 (
    COLOR 4F
    ) else (
    COLOR 2F
    )
pause
----------------------------

So funktioniert es nicht. Und ich verstehe nicht wieso.
----------------------------
echo off
set FL_PRO=D:\

if exist %FL_PRO% (
    findstr /m "FAILED failed" report.txt
    echo %errorlevel%
    if %errorlevel%==0 (
        COLOR 4F
    ) else (
        COLOR 2F
    )
) else (
    COLOR 7F
    echo.
    echo Pfad nicht gefunden.
    echo.
)
pause
---------------------

Autor: Sascha R. (srt2018)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Inhalt in den runden Klammern (somit auch die Ersetzung von 
%errorlevel%) wird ausgewertet bevor er ausgeführt wird.
Mach mal das "Echo Off" weg, dann siehst du das.

Lösung kann ich jetzt am Handy nicht vorschlagen. Ggf. mit findstr ... 
&& color A || color B versuchen.

Autor: Stefan P. (form)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> echo %errorlevel%
>     if %errorlevel%==0

Das If wertet hier den Errorlevel von "Echo" aus! (Also nicht mehr den 
von findstr)

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hab das Skript auf das Minimum reduziert.
Das findstr setzt das errorlevel in der Klammer nicht unabhängig ob das 
Suchwort in der Datei enthalten ist oder nicht.

----------------------------------
set FL_PRO=D:\
if exist %FL_PRO% (
    findstr /m "failed" report.txt
    if %errorlevel%==0 (
        COLOR 4F
    ) else (
        COLOR 2F
    )
)
Pause
-----------------------------------

Ausgabe des Skriptes
---------------------------------
if exist D:\ (
findstr /m "failed" report.txt
 if 0 == 0 (COLOR 4F )  else (COLOR 2F )
)
report.txt

pause
Drücken Sie eine beliebige Taste . . .
----------------------------------


@Stefan P.
Das Errorlevel müsste dann zumindest richtig angezeigt werden was es 
nicht tut.

Bin grade echt überfragt wieso es nicht funktioniert...

Autor: Sascha Ruppert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe meine Antwort oben. %errorlevel% wird zu 0 ersetzt bevor findstr 
überhaupt aufgerufen wird.

Setze probehalber echo on und studiere die Ausgabe. Dann wirst du das 
sehen.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, hatte es falsch verstanden gehabt...

Aber wie erzwinge ich die richtige Verarbeitung?

START /wait findstr /m "failed" report.txt

Hilft auch nicht.

Autor: Sascha R. (srt2018)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
findstr ... && color 4F || color 2F

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eventuell hilft:
setlocal enabledelayedexpansion

Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Existenz eines Ordners prüft man klassisch mit
IF EXIST D:\PFAD\NUL GOTO ERROR

Denn die magische Datei "NUL" existiert in jedem vorhandenen Ordner. 
Theoretisch geht das auch mit anderen Gerätenamen, aber die können 
seltsame Effekte verursachen.

Autor: PittyJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht man heute immer nach Batch-Datei Programmierung?
Gefühlt habe ich das vor 30 Jahren mal gemacht. Ich dachte, Windows 
hätte schon bessere Scriptsprachen mit an Bord.
Ich hätte beinahe gesagt: Geh in die Stadtbücherei, da gibt es:
"Das große Buch zur Batchverarbeitung" von Data Becker.

Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PittyJ schrieb:
> Ich dachte, Windows hätte schon bessere Scriptsprachen mit an Bord.

Wie wäre es mit VBScript oder JScript? :-)
Der eigentliche Ersatz ist die PowerShell, aber damit werde ich 
irgendwie nicht so richtig warm. Vermutlich bin ich DOS- und 
Linux-versaut.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe.
Es funktioniert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.