2010-11-22 9 views
4

neben letzte Zeile der Textdatei zurückzukehren habe ich eine Datei, die die Ausgabe einer Datei enthält vergleichen, das ist in eine Textdatei geschrieben:
Comparing files C:\LOGS\old.txt and C:\LOGS\NEW.TXT
***** C:\LOGS\old.txt
***** C:\LOGS\NEW.TXT
folder_thats_different
*****

Ich brauche die vorletzte Zeile ziehen „folder_thats_different "und eine neue Zeichenfolge eingeben:
folder contains a file that is different: folder_thats_differentBatch-Datei

Ja, ich weiß, dass ich eine andere Sprache verwenden kann, aber ich bin mit Batch-Dateien für jetzt fest.

Antwort

3

können Sie versuchen, es mit einer for-Schleife zu lesen und die aktuelle Zeile nehmen, und immer die vorhergehende Zeile speichern

@echo off 
setlocal EnableDelayedExpansion 
for /f "delims=" %%x in (myFile.txt) do (
    set "previous=!last!" 
    set "last=%%x" 
) 
echo !previous! 
+0

aus irgendeinem Grund funktioniert die letzte Zeile nicht. Ich bekomme "ECHO ist aus" anstatt die Zeile zu drucken. –

+0

Dann! Vorher! ist leer oder Fehleingabe, oder die falsche Datei wird genommen, ersetzen myFile.txt und Sie können ein Echo in der for-Schleife hinzufügen, um den Code zu debuggen – jeb

0

Hier ist ein Beispiel, das Sie als Ausgangspunkt verwenden können. Ändern Sie einfach den Dateinamen in der Zeile set command= in den entsprechenden Namen (oder ersetzen Sie den Befehl mit dem, was auch immer die Protokollliste enthält).

@echo off 
@setlocal 

(set command=type test.txt) 

for /f "usebackq tokens=*" %%i in (`%command%`) do call :process_line %%i 
echo next to last line: %old_line% 
goto :eof 

:process_line 
(set old_line=%new_line%) 
(set new_line=%*) 
goto :eof 

Natürlich möchten Sie wahrscheinlich etwas anderes tun, als einfach die gefundene Zeile zu wiederholen.

+0

Danke das sieht gut aus. Wie kann ich diese Zeile verwenden und sie in eine String-Variable einfügen, um sie später zu verwenden? –

+0

'old_line' ist nur eine Umgebungsvariable - Sie können sie wie jede andere verwenden. 'set my_string_var =% old_line%', zum Beispiel. –

+0

Es funktioniert, aber Anrufe sind extrem zeitaufwendig. 20 mal langsamer als die DelayedExpansion-Variante. – jeb

0

Die erste Antwort für mich funktioniert. Ich habe auch 2 Zeilen nach dem Ende hinzugefügt, um es zu wiederholen, damit ich eine aktive Protokolldatei beobachten konnte, ohne sie schließen und erneut öffnen zu müssen. Ich mache viel Debugging für die Mods, die im Spiel Space Engineers verwendet werden. Meine Version sieht wie folgt aus:

@echo off 
setlocal EnableDelayedExpansion 
for /f "delims=" %%x in (SpaceEngineers.log) do (
    set "previous=!last!" 
    set "last=%%x" 
) 
echo !previous! 
timeout 15 /nobreak 
se_log 

Die Linie unten stoppt die Batch-Datei zu schnell aus Looping und den Schlüssel Bypass zu stoppen. Um die Zeit in Sekunden zu ändern, ändern Sie einfach die Zahl "15" auf alles, was Sie möchten. Um die Batch-Datei zu stoppen, drücken Sie einfach ctrl + c.

Die folgende Zeile ist der Name der Batch-Datei, die ich gemacht habe, so dass CMD sagt, dass er dies erneut ausführen soll.

se_log 
Verwandte Themen