Перейти к основному содержанию

BAT скрипт — вывод первых и последних строк файла

Windows Terminal cmd

Понадобилось мне как-то выдернуть из текстового файла последнюю строку. Операционная система Windows.

Интернет выдал несколько вариантов, но все они оказались странными, то временный файл используют, то виснут на файлах большого размера. Пришлось всё это как-то соединить в один нормальный рабочий вариант.

Скрипт сохраняем в кодировке OEM 866, чтобы работали пути к файлам с кириллицей.

cmd

Вывод последней строки файла

@echo off
SetLocal EnableDelayedExpansion

:: файл
set monfile=C:\пример папки\пример файла.txt

:: Узнать количество строк в файле
for /f %%n in ( 'find /v /c "" ^< "%monfile%"' ) do (
	set /a tail.count=%%n
)

:: Вычислить сколько строк пропустить
set /a tail.count-=1

:: файл в UFT8, переключимся на эту кодировку
chcp 65001 >nul

:: Вывести ns последних строк из файла
more /e +%tail.count% "%monfile%" | find /v ""

:: вернём обратно кодировку OEM 866
chcp 866 >nul

Вывод N последних строк файла

@echo off
SetLocal EnableDelayedExpansion

:: файл
set monfile=C:\пример папки\пример файла.txt

:: сколько выводим строк, в примере 5
set nn=5

:: Узнать количество строк в файле
for /f %%n in ( 'find /v /c "" ^< "%monfile%"' ) do (
	set /a tail.count=%%n
)

:: Вычислить сколько строк пропустить
set /a tail.count-=%nn%

:: файл в UFT8, переключимся на эту кодировку
chcp 65001 >nul

:: Вывести nn последних строк из файла
more /e +%tail.count% "%monfile%" | find /v ""

:: вернём обратно кодировку OEM 866
chcp 866 >nul

cmd

Вывод первой строки файла

@echo off
SetLocal EnableDelayedExpansion

:: файл
set monfile=C:\пример папки\пример файла.txt

:: выводим одну строку
set nn=1

:: файл в UFT8, переключимся на эту кодировку
chcp 65001 >nul

:: вывод nn первых строк из файла
for /f "usebackq delims=;" %%i in ("%monfile%") do (
  echo %%i
  set /a nn=!nn!-1
  if !nn!==0 goto exitfor
)

:: exit for
:exitfor

:: вернём обратно кодировку OEM 866
chcp 866 >nul

Вывод N первых строк файла

@echo off
SetLocal EnableDelayedExpansion

:: файл
set monfile=C:\пример папки\пример файла.txt

:: сколько выводим строк, в примере 5
set nn=5

:: файл в UFT8, переключимся на эту кодировку
chcp 65001 >nul

:: вывод nn первых строк из файла
for /f "usebackq delims=;" %%i in ("%monfile%") do (
  echo %%i
  set /a nn=!nn!-1
  if !nn!==0 goto exitfor
)

:: exit for
:exitfor

:: вернём обратно кодировку OEM 866
chcp 866 >nul

cmd

Теги

 

Похожие материалы

Запуск BAT скрипта при логине на сервер один раз

Настроим автозапуск BAT скрипта при логине юзера на сервер. Сделаем так, чтобы скрипт запускался только один раз, а при последующих входах запускаться не будет.

Теги