Пакетный читатель .txt - PullRequest
       22

Пакетный читатель .txt

0 голосов
/ 22 октября 2018

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

@echo off
set "pc=%1"
FOR /F "delims=:" %%A IN ('findstr /N .* "%pc%"') DO set "zeilen=%%A" 
type %pc%
set /A zeilen1=%zeilen%
:loop
if not %zeilen% == %zeilen1% (
set "line="
set zeilen2=%zeilen% - 1
for /f %%a in ('more/e +%zeilen2% ^< %pc%') do (
   if not defined line set "line=%%a"
)
 echo %line%   
 set /A zeilen+=1
)
FOR /F "delims=:" %%A IN ('findstr /N .* "%pc%"') DO set "zeilen1=%%A
goto loop

записывается новая строка. Я также не могу использовать команду типа (строка 9-13), потому что не хочуобновить весь .txt только последнюю строку.

sry за мой плохой английский

Спасибо

Чтобы запустить пакет, вам нужно сделать что-то вроде этого call batch.cmd txtname.txt

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Базовая команда tail может быть написана так.Благодарим @dbenham за его первоначальное решение на DosTips.com

@echo off
call :Loop <"tailme.txt"

exit

:Loop
set "line="
set /p "line="
if defined line (
  echo %line%
) else (
  pathping -q 1 -p 300 localhost >nul
)
goto :loop
0 голосов
/ 22 октября 2018

Если вы не хотите использовать сторонние опции и хотите сохранить чистую партию, это очень возможно.На ваш вопрос звучит так, будто вы хотите прочитать последнюю строку текстового файла и обновлять этот текст каждый раз, когда текстовый файл редактируется.Более того, этот пакетный файл должен быть call ', к которому его нужно использовать.

Чтобы сделать это, мы можем сравнить дату его последнего изменения, используя forfiles в for loop.Причина этого заключается в том, что если мы используем свойства файла EX: ECHO Last-Modified Date : %%~ta, мы не получим свойства до секунд.Таким образом, файл будет сравниваться только до минут.

Теперь, когда мы можем получить последние измененные свойства, мы можем использовать оператор IF для поиска, когда файл получит новую метку времени.Оттуда мы можем использовать модифицированный скрипт, который читает только последнюю строку текстового файла (настраивается с помощью set /a LINES=LINES+1 LINES + 1 - Infin), созданного @ Patrick Cuff

.пакетный файл, который вы хотите использовать call ReadFile.bat txtname.txt

  • Вызов - Команда
  • ReadFile.bat - Имя сценария пакетной обработки
  • txtname.txt - Имя текстового файла для чтения

Ниже представлен полный текст скрипта.

ReadFile.bat

@ECHO OFF
@GOTO READ

:LOOP
Rem | Look for changes
FOR /f %%a in ('forfiles /M %1 /C "cmd /c echo @fdate-@ftime"') DO (set FileTimeCurrent=%%a)

IF "%FileTimeLoad%"=="%FileTimeCurrent%" (goto LOOP) else (goto READ)

:READ
cls

Rem | Get current date
FOR /f %%a in ('forfiles /M %1 /C "cmd /c echo @fdate-@ftime"') DO (set FileTimeLoad=%%a)

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

Rem | Print the last line
set /a LINES=LINES-1
more +%LINES% < %1

goto LOOP

Для получения справки по любой из команд выполните следующие действия:

  • вызов /?
  • set /?
  • for /?
  • if /?
  • И так далее.
...