2017-06-17 2 views
1

I extrahiert die letzte Zeile einer Textdatei mit dem folgenden Befehl:Batch File FOR-Schleife mit variabler

for /f "tokens=*" %%m in (message_log.txt) do (
    Set lastline=%%m 
) 

Mein Ziel ist es, wenn die Variable %lastline%=="☺§☻PDF Datei abgebrochen wurde. dann, um einen Ausgang anzuzeigen und wenn nicht zu beenden. Aber ich denke, dass die ersten drei Charaktere es vermasseln. Ich versuche dies:

for /F "tokens=1-5 delims= " %%a in (%lastline%) do (
    if %%e==aborted. (
     echo pdf not filed 
    ) 
Pause 

aber die Datei wird nur beendet, ohne Pause und keine Ausgabe.

Ich kann dies zum Funktionieren bringen, wenn ich anstelle von %lastline% auf eine Datei verweisen, wie ich es in der ersten for-Schleife getan habe, aber ich kann es nicht mit einer Variablen arbeiten.

Wie lautet die richtige Syntax für die Suche in einer vordefinierten Variablen mithilfe einer FOR-Schleife?

Wenn es einfacher ist, mein Ziel ist es, eine Fehlermeldung, wenn die letzte Zeile in meiner Textdatei enthält die Zeichenfolge „Abbruch“ Echo. Gibt es einen besseren Weg, dies zu tun?

+5

Sie verpassen eine ')'. Öffnen Sie die Eingabeaufforderung, und führen Sie das Skript von dort aus, anstatt darauf zu klicken, um festzustellen, ob Fehler vorhanden sind. – SomethingDark

Antwort

0

Ihr erster Ansatz ist in Ordnung, nur den Scheck fehlt.

for /f "delims=" %%m in (message_log.txt) do Set lastline=%%m 

If "%lastline%" neq "%lastline:abort=%"^
    Echo error message the last line in message_log.txt contains the string "abort" 

Mit findstr

for /f "delims=" %%m in (message_log.txt) do Set lastline=%%m 

Echo %lastline%|Findstr /i "abort" 2>&1 >Nul &&^
    Echo error message the last line in message_log.txt contains the string "abort" 

Mit GnuWin32 Tools installiert

tail -n 1 message_log.txt|grep "abort" >NUL &&^
    Echo error message the last line in message_log.txt contains the string "abort" 
+0

Vielen Dank für die Lösungen! Ich habe das erste benutzt und es hat fantastisch funktioniert! Ich musste den Hut allerdings loswerden. Ich bin mir nicht sicher, warum es dort war, aber es würde die nächste Codezeile nicht erkennen, wenn sie vorhanden wäre. – Lawrence

+0

Das Caret '^' als letztes Zeichen ist das [Zeilenfortsetzungszeichen, um lange Zeilen zu trennen] (https://stackoverflow.com/questions/69068/long-commands-split-over-multiple-lines-in-windows- Vista-Batch-Bat-Datei) – LotPings