Batch Anfängerfrage zum Thema Wildcard

CED999

Lieutenant
Dabei seit
Juni 2011
Beiträge
852
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?
 

r0b0t

Ensign
Dabei seit
Juni 2010
Beiträge
199
%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%
 

CED999

Lieutenant
Ersteller dieses Themas
Dabei seit
Juni 2011
Beiträge
852
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)

bauers

Ensign
Dabei seit
März 2003
Beiträge
154
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"
 

HDScratcher

Lieutenant
Dabei seit
Aug. 2011
Beiträge
1.002
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:

CED999

Lieutenant
Ersteller dieses Themas
Dabei seit
Juni 2011
Beiträge
852
@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

Zuletzt bearbeitet: (Bild entfernt)

HDScratcher

Lieutenant
Dabei seit
Aug. 2011
Beiträge
1.002
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
 

bauers

Ensign
Dabei seit
März 2003
Beiträge
154
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"
 

r0b0t

Ensign
Dabei seit
Juni 2010
Beiträge
199
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.
 

CED999

Lieutenant
Ersteller dieses Themas
Dabei seit
Juni 2011
Beiträge
852
@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)

HDScratcher

Lieutenant
Dabei seit
Aug. 2011
Beiträge
1.002
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:

CED999

Lieutenant
Ersteller dieses Themas
Dabei seit
Juni 2011
Beiträge
852
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...
 
Top