dedalus2011
Goto Top

Errorlevels findstr

Hallo,

es sollen je nach return value einer Suche nach einem regulären mit logischen AND verknüpften Ausdruck Zeilen in verschiedenen Ordnern kopiert werden. Wie geht das am einfachsten? Oder geht's anders?

set "ABC=Process Start *Process *: *FFF"  
set "Error=Process Start *Process.*FFF"  


(if 0==0 echo "%Zeile%"|findstr /i /r /c:"%Error%">nul && echo "%Zeile%"|findstr /i /r /c:"%ABC%">nul) && (if %ERRORLEVEL% == 0 >>"%Folder1%" echo. !Zeile!)  

(if 0==0 echo "%Zeile%"|findstr /i /r /c:"%Error%">nul && echo "%Zeile%"|findstr /i /r /c:"%ABC%">nul) && if %ERRORLEVEL% == 1 >>"%Error%" echo. !Zeile!  

Danke für Eure Tipps

Gruß
dedalus2011

Content-ID: 188020

Url: https://administrator.de/contentid/188020

Ausgedruckt am: 24.11.2024 um 07:11 Uhr

pieh-ejdsch
pieh-ejdsch 14.07.2012 aktualisiert um 11:35:28 Uhr
Goto Top
moin dedalus,

aus was für einer Ausgabe nimmst Du denn die Variable Zeile?

Wenn Du die Ausgabe vom Findstr nicht nach nul umleitest, dann brauchst Du auch keine extra Ausgabe Produzieren.

Der Errolevel der Variable Errolevel bleibt auf einer Befehlszeile immer gleich.
Versuche stattdessen (für Erfolgreich) && oder :
if not ERRORLEVEL 1 Befehl

ist die Variable Error nun eine Suchzeichenfolge oder eine Datei?
Stark Vereinfacht wird es aber so geschrieben:
( (echo "%Zeile%"  
  ) |findstr /irc:"%Error%" |findstr /irc:"%ABC%" || <nul >&2 (set /p "=%Zeile%" &echo()  
) 1>>"%Folder1%" 2>>"FehlerDatei.txt"  
Wenn Du die Fehlerausgabe vom Findstr nicht in der Fehlerausgabe haben möchtest, dann leite die Fehlermeldung(en) enweder pro Findstr oder beide geklammert um.

Gruß Phil
dedalus2011
dedalus2011 14.07.2012 um 11:46:01 Uhr
Goto Top
moin pieh-ejdsch,

set "ABC=Process Start *Process *: *FFF"   
set "Error=Process Start *Process.*FFF"   

Je nach return value des konkatenierten Ausdrucks
 (echo "%Zeile%"|findstr /i /r /c:"%Error%">nul && echo "%Zeile%"|findstr /i /r /c:"%ABC%">nul)   

sollen Zeilen in verschiedenen Ordnern kopiert werden ("Fehler"/"Folder" Ordner)

Gruß
dedalus2011
dedalus2011
dedalus2011 17.07.2012 aktualisiert um 17:20:18 Uhr
Goto Top
Also, was ich hier brauche ist eigentlich ein XOR für jedes Operationspaar.

 ((echo "%Zeile%") |findstr /irc:"%ABC%" |findstr /irc:"%Error%" || >&2 echo %Zeile%) 1>>"%ABC%" 2>>"%Error%"  

Es gibt nur folgende Möglichkeiten: True True, False False, True False, False True.
Wenn beide gleich sind dann müssen die Zeilen in einen Ordner sonst in den anderen Ordner. Es würde wahrscheinlich nur mit einem XOR davor gehen..Kann ein XOR für nicht binäre Operatoren in Batch simuliert werden?

Danke für Eure Tipps

Gruß
dedalus2011
pieh-ejdsch
pieh-ejdsch 19.07.2012 aktualisiert um 18:49:08 Uhr
Goto Top
moin dedalus,

wenn eine Befehlsverkettung (nächster liest die vorherige Ausgabe als Eingabe) ist wird immer der letzte Befehl den Errorlevel bestimmen. Es ist immer ein AND und kein XOR.

Sowas Ähnliches wie ein XOR und AND (natürlich nur Simuliert) ist dies hier.

Wenn der erste Findstr keine Ausgabe zum weiterreichen hat, dann ist faktisch im zweiten Findstr sowieso keine Positive Ausgabe (nicht gefunden gibt hier Errorlevel größer 0).

Die Handles (1 2 ...) Schreiben dazu noch genau in die Richtige Datei - dafür sind ja schliesslich die Handles da.

(
for %%i in ("1: a b" "2: a c" "3: b c" "4: c c") do @echo %%i|findstr a |findstr b ||>&2 echo %%i  
) 1>>Richtig.txt 2>>Fehler.txt


Dein XOR (gleiche Resultate [0 0 und 1 1] ist Ergebnis) sähe aber so aus:
for %%i in ("1: a b" "2: a c" "3: b c" "4: c c") do @echo %%i|findstr  /virc:"a" /c:"b" || echo %%i|findstr /c:"a" |findstr /c:"b"  

Gruß Phil