Удалить последнюю строку, всегда начинающуюся с «TRAILER», из текстового файла в пакетном скрипте Windows

Удалить последнюю строку, всегда начинающуюся с «TRAILER», из текстового файла в пакетном скрипте Windows

Я хочу удалить последнюю строку из текстового файла с помощью пакетного скрипта Windows. Последняя строка всегда будет иметь вид 'TRAILER|'. Как мне этого добиться? Мой файл .txt выглядит так:

1220|6963|ГРУЗОВИК|5760|

1221|6964|ГРУЗОВИК|1440|

1220|6965|ГРУЗОВИК|2880|

1221|6966|ГРУЗОВИК|2880|

1221|6967|ГРУЗОВИК|2880|

ТРЕЙЛЕР|5|

решение1

Я попробовал по-вашему, написав:

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

Здесь%SFTP_INDIR% = D:\Batch\Batch_FWK\SFTP\inbox.

Выходной файл loc.txt теперь не содержит последнюю запись TRAILER|5|, но он вывел каждую запись в выходном файле следующим образом:

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

TheотвечатькРомео Нинов

findstr /v TRAILER filename >newfilename

работает так, как вам хотелось бытолькопри удалении последней строки изодинокийфайл.

Это потому что:

Если выполняется поиск более чем одного файла, результаты будут снабжены префиксом имени файла, в котором был найден текст. Имя файла не выводится, если запрос был явно для одного файла или если выполняется поиск конвейерного ввода или перенаправленного ввода.

Чтобы обойти это ограничение, вы можете использовать forкоманду для обработки нескольких отдельных файлов и вывода результатов в один файл.

Попробуйте выполнить следующую команду в пакетном файле:

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

При запуске из командной строки замените %%на %.


Источникfindstr

Связанный контент