
Я хочу удалить последнюю строку из текстового файла с помощью пакетного скрипта 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|
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