
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 for
Befehl 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