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

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 скрипт для резервного копирования MySQL в Облако Mail.Ru

Накидал маленький BAT скрипт для резервного копирование MySQL баз в Облако Mail.Ru по протоколу WebDAV. Внесите свои данные и через scheduler настройте расписание резервного копирования.

Теги

Drupal — размещение блока в произвольном месте статьи

Многие владельцы сайтов сталкиваются с необходимостью размещения дополнительных блоков в своих статьях. Это может быть рекламный блок или какое-то объявление. Или просто какое-то декоративное праздничное оформление сайта.

Теги