Batch Anfängerfrage zum Thema Wildcard

CED999

Lieutenant
Dabei seit
Juni 2011
Beiträge
945
Hi all,

ich möchte mit dem Befehl findstr in einer Batch Datei zwei Bedingungen abfragen. Konkret soll eine Datei ausgelesen werden die so aufgebaut ist:
CBS.Log.PNG

Es sollten nun nur diejenigen strings in eine andere Datei kopiert werden, die vom heutigen Datum stammen UND "[SR] Repairing corrupted File" enthalten. Microsoft bietet ausführliche Dokumentation zu findstr:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/findstr.mspx?mfr=true

Leider ist mir mit einigem ausprobieren nicht die Lösung aufgefallen (bin mehr so der 5-Zeilen-Programmierer fürn Hausgebrauch), wie ich den wildcard "." und " "*" richtig einsetze. Probiert habe ich:

Code:
findstr /c:"%date%.*[SR] Repairing corrupted file" %windir%\Logs\CBS\CBS.log >"%userprofile%\Batch\test.txt"

was leider nicht funktioniert hat. Und da habe ich auch meinen Hänger eigentlich ist Sind die Wildcard-Operatoren doch richtig verwendet :heul:

was mache ich falsch?
 
%date% wird wahrscheinlich "25.02.2013" liefern, wenn du an einem deutschen Dystem arbeitest. Du brauchst aber "2013-02-25"

Versuchs mal mit: %date:~6,4%-%date:~3,2%-%date:~0,2%
 

wurstele ich das direkt in den findstr rein (anstelle von meinem jetzigen %date%, oder muss ich dazu eine neue Variable definieren?

P.S. ich schreibe dir noch eine Dankeschön für die antwort im anderen Thread hat mich ja schon weitergebracht...

P.P.S ich habs natürlich ausprobiert mit:
findstr /c:"%date:~6,4%-%date:~3,2%-%date:~0,2%.*[SR] Repairing corrupted file" %windir%\Logs\CBS\CBS.log >"%userprofile%\Batch\test.txt"


und es bringt immer noch ein Errorlevel von 1 (was nicht sein sollte). Was mache ich falsch...
 
Zuletzt bearbeitet: (Nachtrag)
findstr /c:"%date:~6,4%-%date:~3,2%-%date:~0,2%" %windir%\Logs\CBS\CBS.log | findstr /c:"Repairing corrupted file" %windir%\Logs\CBS\CBS.log >"%userprofile%\Batch\test.txt"
 
Die Wildcards sind teil des regulären Ausdrucks, der beim Suchen benutzt wird, die Eckigen Klammern haben da aber auch eine andere Bedeutung.

So sollte es aber gehen:

Das mit dem Datum habe ich in Langform gelassen, da ich es selbst auch häufiger in anderen Situationen nutze. :)
Man kann das aber auch direkt in den Code "reinwursteln"

Code:
set curYear=%date:~6,4%
set curMonth=%date:~3,2%
set curDay=%date:~0,2%
set curDate=%curYear%-%curMonth%-%curDay%

findstr /b /r /c:"%curDate%.*\[SR\] Reparing corrupted file" %windir%\Logs\CBS\CBS.log >"%userprofile%\Batch\test.txt"
 
Zuletzt bearbeitet:
@Bauers: hat noch nicht ganz gefunzt:

  1. gab ne fehlermeldung in der Konsole: FINDSTR: Fehler beim schreiben
  2. Datei wurde mit Daten befüllt und auch geöffnet aber:
  3. es waren auch Einträge vom 21.02. dabei was ich ja nicht wollte

UND: könntest du mir bitte noch sagen was "|" genau macht?
Ergänzung ()

@HDScratcher: hat auch noch nicht ganz gefunzt. Gibt folgendes Bild in der Konsole:Konsole1.PNG


Errorlevel=1 sollte nicht sein, da passende Ereignisse von heute vorliegen...

Nur um sicher zu gehen: Ich nutze Win7 prof 64-bit in der Deutschen Version, hat es was damit zu tun?
 

Anhänge

  • Konsole1.PNG
    Konsole1.PNG
    32,9 KB · Aufrufe: 87
Zuletzt bearbeitet: (Bild entfernt)
So wie Du mit > die Ausgabe in eine Datei umlenken kannst, kannst Du die Ausgabe mit | in die Eingabe eines anderen Prozesses lenken.

Du weist wahrscheinlich was
echo j
macht und was
del *.*
macht

was macht dann? (bitte nur in einem Test-Ordner mit Test-Dateien nachmachen :) )
echo j | del *.*

PS:
habe den vorherigen Post nochmal editiert, nachdem Du per Copy'n'Paste dran warst, Sorry
kopiere die Zeile mit findstr nochmal
 
Sorry habs nicht richtig getestet. Das sollte sicher funktionieren:

findstr /c:"%date:~6,4%-%date:~3,2%-%date:~0,2%" %windir%\Logs\CBS\CBS.log >"%userprofile%\Batch\tmp.txt"
findstr /c:"Repairing corrupted file" "%userprofile%\Batch\tmp.txt" >"%userprofile%\Batch\test.txt"
 
Versuchs mal mit zwei hintereinander verketteten findstr:

findstr /C:"%date:~6,4%-%date:~3,2%-%date:~0,2%" %windir%\Logs\CBS\CBS.log | findstr /C:"[SR] Repairing corrupted file" > ...

Das erste sucht nach dem Datum. Das zweite dann unter den Gefundenen die eigentlich Gesuchten. Leider versteht findstr mit /R das Leerzeichen als logisches ODER. Das wird nach deiner Methode also so nicht funktionieren. Das | verkettet zwei Befehle. Die Ausgabe des Ersten wird zur Eingabe des zweiten Befehls.
 
@HDScratcher: jo kein Ding. Es funzt aber noch nicht richtig. Habe die Zeile ausgetauscht. Er hat Errorlevel 1 was net stimmt und die Datei die er erstellt ist leer.

@Bauers: Die Vorgehensweise mit den 2 Dateien hat 100% funktioniert :daumen:- jetzt muss ich nur noch die erste löschen lassen. Thx!!

@r0b0t: hat perfekt gefunzt!!! Danke!!!


Kann mir noch jemand eine Frage zu "|" beantworten? HdScratcher meinte ich wüsste was echo j... macht. Nein ich wusste das nicht. Habe es jetzt ausprobiert (Danke für den hinweis mit Testordner ;) Was ich aber noch nicht ganz raffe an "|" ist: DAs gibt doch die Antwort, bevor von delete gefragt wurde? Wie funktioniert das?
 
Zuletzt bearbeitet: (Tippfehler)
Hast Du den in C:\Windows\Logs\CBS\CBS.log auch Einträge von heute, auf die der Such-String passt?

PS:
Im Screenshot ist ein Eintrag vom 21.2.
Wenn Du die Zeile mit findstr testweise änderst in

Code:
findstr /b /r /c:"2013-02-21.*\[SR\] Reparing corrupted file" %windir%\Logs\CBS\CBS.log >"%userprofile%\Batch\test.txt"

geht's dann?

PPS:
Fehler gefunden in Repairing fehlt ein "i".

also korrekt
Code:
set curYear=%date:~6,4%
set curMonth=%date:~3,2%
set curDay=%date:~0,2%
set curDate=%curYear%-%curMonth%-%curDay%
 
findstr /b /r /c:"%curDate%.*\[SR\] Repairing corrupted file" %windir%\Logs\CBS\CBS.log >"%userprofile%\Batch\test.txt"
 
Zuletzt bearbeitet:
Hallo HDScratcher, wollte Dir noch sagen, dass mich die Beschäftigung mit deiner Lösung auch weitergebracht hat. Interessanterweise konnte ich aus allen 3 Lösungen was lernen...

Cheers...
 
Zurück
Top