Batch Datei

crossshot

verifiziertes Mitglied
Registriert
27. Aug. 2007
Beiträge
2.055
Real Name
Chris
Ich brauche mal fix Hilfe, weil ich gerade wirklich auf dem Schlauch stehe:

mit "findstr" möchte ich nach einem bestimmten Textmuster in einer bestimmten Datei suchen. Danach gehts mit Errorlevel weiter. Das funktioniert soweit auch. Aber ich möchte das Ergebnis auch in einer Text-Datei abspeichern und das funktioniert nicht.

Führe ich den Befehl direkt in der Windows Kommandozeile aus, wird das Ergebnis in eine Text-Datei gespeichert.
Führe ich den exakt gleichen Befehl via Batch aus -> Pustekuchen; die Datei bleibt leer

findstr c:"existiert nicht" 1.xml > D:\Logs\test.txt

Das ist der ganze Befehl.

"existiert nicht" ist mein Suchbefehl
1.xml ist die zu durchsuchende Datei
Und Errorlevel für die entsprechende Info

So, sieht es aus, wenn der Befehl in der CMD manuell ausgeführt wird (ohne Ausgabe)

1712656413803.png

So sieht es mit Ausgabe in der Text-Datei aus

1712656471791.png

Und so im Batch inkl. leerer Text-Datei

1712661621070.png

Wo liegt mein Fehler? Oder gibt es einer Alternative?
 
War das nicht doppelte eckige Klammer für Text-Export in Datei?
Also >>

EDIT: Kurzer Test mit dir >> inhalt.txt funktioniert bei mir.
 
> ist neue Datei
>> ist anhängen, falls schon vorhanden.
Sollte also wenn dann beides in irgendeiner Weise funktionieren.

Was mich irritiert ist das c:
 
Das gehört zu dem Teil, der mich irritiert

1712665846887.png

Warum gibt er dir überhaupt was mit c: statt /c: aus? :kopfkratz:
Der checkt doch ohne / gar nicht, dass das ein Parameter sein soll.
 
Ich habe beide Varianten getestet und es verhält sich zumindest direkt in der Kommandozeile gleich. Habe es jetzt mit /c: getestet und da hat sich nichts verändert.

Er macht im Batch auch keine Ausgabe. Direkt in der Kommandozeile zeigt es die gefundenen Ergebnisse an. Im Batch nicht. Echo ist an!
 
Möglicherweise habe ich den Fehler gefunden. Obwohl in einer 1.xml mein Suchbegriff nicht vorkommt, beendet er findstr mit Errorlevel 0 (gefunden) obwohl er eigentlich bei keinem Match mit Errorlevel 1 (nicht gefunden) abschließen sollte.

Sehr komisch :eek:
 
So wie unter Linux mit einem Cronjob ist es aber nicht? Da ist $PATH meist gar nicht oder nur sehr rudimentär gesetzt. Damit kann nicht jedes Binary direkt ohne vollen Pfad gerufen werden.

Führt man das Script jedoch interaktiv aus, dann ist $PATH deutlich umfangreicher gesetzt.

Wenn das für Windows nicht gilt, dann bitte einfach in den Skat drücken.
 
Es funktioniert jetzt. Waren mehrere User-Fehler. Es war der zurückgegebene Errorlevel nicht korrekt und dadurch habe ich mich auf die falsche Fährte locken lassen.

Code:
REM ------- Im Ordner XXX den aktuellsten Ordner ermitteln
FOR /F "delims=" %%i IN ('dir "XXX" /b /ad-h /t:c /od') DO SET t=%%i
echo aktuellster Ordner: %t%

REM ------- Im Log-Ordner in XXX nach Fehlereintraegen in der 1.xml suchen
cd /D XXX\%t%\LOG
echo XXX Pfade >> "%LogPath%"
findstr /r /i /c:"\<existiert nicht.\>" 1.xml >> "%LogPath%"
echo. >> "%LogPath%"
IF NOT ERRORLEVEL 1 echo !! Fehler in XXX >> "%Log%" && goto Email
echo Kein Fehler im XXX >> "%Log%"
 
Zurück
Oben Unten