Löschen Sie aus einer Textdatei im Windows-Batch-Skript die letzte Zeile, die immer mit „TRAILER“ beginnt

Löschen Sie aus einer Textdatei im Windows-Batch-Skript die letzte Zeile, die immer mit „TRAILER“ beginnt

Ich möchte die letzte Zeile aus einer Textdatei mithilfe eines Windows-Batchskripts entfernen. Die letzte Zeile wird immer wie „TRAILER|“ aussehen. Wie kann ich das erreichen? Meine TXT-Datei sieht folgendermaßen aus:

1220|6963|LKW|5760|

1221|6964|LKW|1440|

1220|6965|LKW|2880|

1221|6966|LKW|2880|

1221|6967|LKW|2880|

TRAILER|5|

Antwort1

Ich habe es auf Ihre Weise versucht, indem ich geschrieben habe:

findstr /v TRAILER %SFTP_INDIR%\Location*.txt > %IN_DIR%\loc.txt

Hier%SFTP_INDIR% = D:\Batch\Batch_FWK\SFTP\inbox.

Die Ausgabedatei loc.txt enthält TRAILER|5|jetzt nicht den letzten Datensatz, aber sie druckt jeden Datensatz wie folgt in die Ausgabedatei:

D:\Batch\Batch_FWK\SFTP\inbox\Location.20150528060210.txt:1220|6963|TRUCK|5760|

DerAntwortvonRomeo Ninov

findstr /v TRAILER filename >newfilename

funktioniert wie gewünschtnurbeim Entfernen der letzten Zeile aus einemeinzelDatei.

Das ist weil:

Wenn mehr als eine Datei durchsucht wird, wird den Ergebnissen der Dateiname vorangestellt, in dem der Text gefunden wurde. Der Dateiname wird nicht gedruckt, wenn die Anforderung explizit für eine einzelne Datei war oder wenn nach Pipe-Eingabe oder umgeleiteter Eingabe gesucht wird.

Um diese Einschränkung zu umgehen, können Sie mit einem forBefehl mehrere einzelne Dateien verarbeiten und die Ergebnisse in einer Datei ausgeben.

Versuchen Sie den folgenden Befehl in einer Batchdatei:

for /f "tokens=*" %%a in ('dir /b "%SFTP_INDIR%\Location*.txt"') do findstr /v TRAILER %%a >> %IN_DIR%\loc.txt

Ersetzen Sie es bei der Ausführung über eine Befehlszeile %%durch %.


QuelleSuche

verwandte Informationen