Пакетный скрипт CMD.EXE для отображения последних 10 строк из текстового файла

Этот ответ сочетает в себе scripting лучшие черты уже существующих dos-batch ответов и добавляет несколько cmd изюминок.

Решение - это простая scripting пакетная реализация хвостовой .bat команды.

Первый аргумент - это bat имя файла (возможно, с указанием winbatch пути - обязательно заключите cmd его в кавычки, если какая-либо batch часть пути содержит пробелы batch-script или другие проблемные символы).

Второй .bat аргумент - это количество scripting печатаемых строк.

Наконец, можно dos-batch добавить любой из стандартных scripts вариантов MORE: / E / C / P windows-batch / S / Tn. (Для получения cmd.exe дополнительной информации bat см. БОЛЬШЕ /?).

Кроме того, можно windows-batch указать параметр / N (без batch паузы), чтобы вывод печатался cmd.exe непрерывно без пауз.

Решение winbatch сначала использует FIND для .bat быстрого подсчета количества batch строк. Файл передается через winbatch перенаправленный ввод вместо batch использования аргумента имени cmd-script файла, чтобы исключить распечатку dos-batch имени файла в выводе FIND.

Число cmd-script строк, которые нужно пропустить, вычисляется cmd-script с помощью SET / A, но затем cmd он сбрасывает число на 0, если .bat оно меньше 0.

Наконец, использует windows-batch MORE, чтобы распечатать нужные batch-file строки после пропуска ненужных batch-files строк. MORE будет приостанавливаться scripts после каждого количества batch строк на экране, если вывод cmd-script не перенаправляется в файл cmd-script или не передается другой windows-batch команде. Параметр / N позволяет batch-files избежать пауз, передавая cmd.exe вывод MORE в FINDSTR с регулярным batch-file выражением, которое соответствует batch-file всем строкам. Важно использовать batch-script FINDSTR вместо FIND, потому windows-batch что FIND может обрезать длинные batch строки.

:: tail.bat File Num [/N|/E|/C|/P|/S|/Tn]...
::
::   Prints the last Num lines of text file File.
::
::   The output will pause after filling the screen unless the /N option
::   is specified
::
::   The standard MORE options /E /C /P /S /Tn can be specified.
::   See MORE /? for more information
::
@echo OFF
setlocal
set file=%1
set "cnt=%~2"
shift /1
shift /1
set "options="
set "noPause="
:parseOptions
if "%~1" neq "" (
  if /i "%~1" equ "/N" (set noPause=^| findstr "^") else set options=%options% %~1
  shift /1
  goto :parseOptions
)
for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N
set /a "skip-=%cnt%"
if %skip% lss 0 set skip=0
more +%skip% %options% %file% %noPause%

batch-file

scripting

cmd

2022-07-20T06:44:50+00:00
Вопросы с похожей тематикой, как у вопроса:

Пакетный скрипт CMD.EXE для отображения последних 10 строк из текстового файла