批处理.txt阅读器

时间:2018-10-21 22:38:57

标签: batch-file auto-update chatroom

因此,基本上,我希望批处理文件读取.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

我也不能使用type命令(第9-13行),因为我不想只刷新最后一行的整个.txt。

为我的英语不好对不起

谢谢

要启动批处理,您需要执行以下操作call batch.cmd txtname.txt

2 个答案:

答案 0 :(得分:1)

基本的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

答案 1 :(得分:0)

如果您不想使用第三方选项,并希望保持纯批处理,则很有可能。从您的问题看来,您似乎希望阅读文本文件的最后一行,并在每次编辑文本文件时让它更新该文本。此外,该批处理文件在需要使用时会call进行修改。

为此,我们可以在forfiles中比较使用for loop对其进行最后修改的日期。这样做的原因是,如果我们使用文件属性EX:ECHO Last-Modified Date : %%~ta,我们将不会把属性缩短到几秒钟。因此,该文件只会与分钟进行比较。

现在,我们可以获取上次修改的属性,可以使用IF语句查找文件何时获得新的时间戳。在这里,我们可以使用修改后的脚本,该脚本仅读取由@Patrick Cuff制作的文本文件的最后一行(可由set /a LINES=LINES+1 LINES + 1-Infin配置)

要调用此批处理文件,您将要使用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

要获取有关任何命令的帮助,请执行以下操作:

  • 致电/?
  • 设置/?
  • /?
  • 如果/?
  • 等等。