CMD.EXE пакет script для отображения последних 10 строк из txt файла

Любые идеи, как эхо или ввести последние 10 строк txt файла?

Я запускаю журнал изменений сервера script, чтобы пригласить администраторов указать, что они делают, поэтому мы можем отслеживать изменения. Я пытаюсь получить script, чтобы показать последние 10 записей или около того, чтобы дать представление о том, что происходит в последнее время. Я нашел script, который имеет дело с последней строкой, как показано ниже, но не может понять, что изменить в ней, чтобы отобразить последние 10 строк. Script:

@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (c:\log09.txt) do (
set var=%%a
)
echo !var!

Пример файла журнала:

06/02/2009, 12:22,Remote=Workstation-9,Local=,
mdb,bouncing box after updates,CAS-08754,
=================
07/02/2009, 2:38,Remote=,Local=SERVER1,
mdb,just finished ghosting c drive,CAS-08776,
=================
07/02/2009, 3:09,Remote=,Local=SERVER1,
mdb,audit of server,CAS-08776,

Любые мысли? script отлично работает, просто нужно, чтобы он транслировал больше строк на экран.

Ответ 1

Надеюсь, это спасет глаза Джоэла:)

@echo OFF

:: Get the number of lines in the file
set LINES=0
for /f "delims==" %%I in (data.txt) do (
    set /a LINES=LINES+1
)

:: Print the last 10 lines (suggestion to use more courtsey of dmityugov)
set /a LINES=LINES-10
more +%LINES% < data.txt

Ответ 2

Этот ответ объединяет лучшие возможности уже существующих ответов и добавляет несколько завихрений.

Решение представляет собой простую пакетную реализацию команды tail.

Первым аргументом является имя файла (возможно, с информацией о пути - обязательно вставляйте в кавычки, если какая-либо часть пути содержит пробелы или другие проблемные символы).

Второй аргумент - количество строк для печати. ​​

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

Кроме того, можно указать параметр /N (без паузы), чтобы заставить печать печатать непрерывно без паузы.

Решение сначала использует FIND для быстрого подсчета количества строк. Файл передается через перенаправленный ввод вместо использования аргумента имени файла, чтобы исключить распечатку имени файла на выходе FIND.

Количество пропущенных строк вычисляется с помощью SET/A, но затем оно сбрасывает число до 0, если оно меньше 0.

Наконец, используется MORE, чтобы распечатать нужные строки после пропущенных нежелательных строк. MORE будет останавливаться после каждого экрана, стоящего на линии, если выход не перенаправлен в файл или не передан в другую команду. Параметр /N позволяет избежать пауз, передавая вывод MORE в FINDSTR с регулярным выражением, которое соответствует всем строкам. Важно использовать FINDSTR вместо FIND, потому что FIND может обрезать длинные строки.

:: 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%

Ответ 3

Вероятно, вы должны просто найти хорошую реализацию tail. Но если вы действительно настаиваете на использовании командных файлов CMD и хотите работать на любой NT-машине без проблем, это будет работать:

@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (c:\tmp\foo.txt) do (
set var9=!var8!
set var8=!var7!
set var7=!var6!
set var6=!var5!
set var5=!var4!
set var4=!var3!
set var3=!var2!
set var2=!var1!
set var1=!var!
set var=%%a
)
echo !var9!
echo !var8!
echo !var7!
echo !var6!
echo !var5!
echo !var4!
echo !var3!
echo !var2!
echo !var1!
echo !var!

Ответ 4

Существует несколько оконных команд хвостовой команды. Это должно быть именно то, что вы хотите.

Это звучит особенно хорошо: http://malektips.com/xp_dos_0001.html

Они варьируются от мониторинга в реальном времени до последних x строк файла.

Изменить: я заметил, что включенная ссылка относится к пакету. Она должна работать, но вот еще несколько версий:

http://www.lostinthebox.com/viewtopic.php?f=5&t=3801 http://sourceforge.net/projects/tailforwin32

Ответ 5

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

$find /v /c "%%$%!" yourtextfile.txt

это приведет к выводу, подобному этому

$---------- yourtextfile.txt: 140

тогда вы можете анализировать вывод, используя для этого

$for /f "tokens=3" %i in ('find /v /c "%%$%!" tt.txt') do set countoflines=%i

то вы можете вычесть десять строк из общих строк

Ответ 6

После всех ответов, которые я нашел на этой странице, ни один из них не работал в моем файле с 15539 строками.

Однако я нашел ответ здесь, чтобы отлично работать. Скопировано в этот пост для удобства.

@echo off
for /f %%i in ('find /v /c "" ^< C:\path\to\textfile.txt') do set /a lines=%%i
set /a startLine=%lines% - 10
more /e +%startLine% C:\path\to\textfile.txt

Этот код напечатает последние 10 строк в файле "C:\path\to\textfile.txt".

Кредит отправляется OP @Peter Mortensen

Ответ 7

с помощью одной команды powershell:

powershell -nologo "& "Get-Content -Path c:\logFile.log -Tail 10"

применяется к powershell 3.0 и более поздним

Ответ 8

Я согласен с ответом "Вы должны использовать TAIL". Но в Windows это не по умолчанию. Я предлагаю вам загрузить " Windows 2003 Resource Kit" Он работает на XP/W2003 и более.

Если вы не хотите устанавливать на свой сервер, вы можете установить комплект ресурсов на другом компьютере и скопировать только TAIL.EXE на ваш сервер. Использование sooooo намного проще.

C:\> TAIL -10 myfile.txt

Ответ 9

Здесь утилита, написанная в чистой партии, которая может отображать строки файла в заданном диапазоне. Чтобы показать используются последние строки (здесь script называется tailhead.bat):

call tailhead.bat -file "file.txt" -begin -10

Ответ 10

Любые идеи, как эхо или введите последние 10 строк txt файла?

Следующий трехстрочный script будет отображать последние n строк из входного файла. n и имя файла/путь передаются в качестве входных аргументов.

# Script last.txt
var str file, content ; var int n, count
cat $file > $content ; set count = { len -e $content } - $n
stex -e ("["+makestr(int($count))) $content

script находится в biterscripting. Чтобы использовать, загрузите biterscripting из http://www.biterscripting.com, сохраните этот script как C:\Scripts\last.txt, запустите biterscripting, введите следующая команда.

script last.txt file("c:\log09.txt") n(10)

В приведенном выше списке будут перечислены последние 10 строк из файла c:\log09.txt. Чтобы перечислить последние 20 строк из того же файла, используйте следующую команду.

script last.txt file("c:\log09.txt") n(20)

Чтобы перечислить последние 30 строк из другого файла C:\folder1\somefile.log, используйте следующую команду.

script last.txt file("C:\folder1\somefile.log") n(30)

Я написал script довольно обычным образом, поэтому его можно использовать различными способами. Не стесняйтесь переводить на другой язык сценариев/партий.