批量 .txt 阅读器

Posted

技术标签:

【中文标题】批量 .txt 阅读器【英文标题】:Batch .txt reader 【发布时间】:2018-10-21 22:38:57 【问题描述】:

所以,基本上我想要一个批处理文件来读取 .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

【问题讨论】:

所以你基本上是在尝试做tail -f的批处理版本? 可以从Windows 2003 Resource Kit获取TAIL命令 @ErrorsOnly,请在您接受的答案下方查看我的 cmets。 【参考方案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

【讨论】:

【参考方案2】:

如果您不希望使用第三方选项并希望保持纯批处理,这是非常有可能的。从您的问题来看,听起来您希望读取文本文件的最后一行,并在每次编辑文本文件时更新该文本。此外,这个批处理文件在需要使用时可以call'ed。

为此,我们可以在for loop 中使用forfiles 比较上次修改的日期。这样做的原因是,如果我们使用文件属性 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

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

呼叫 /? 设置 /? 对于 /? 如果 /? 等等。

【讨论】:

这段代码在计算行数和输出新更新的行数方面存在一些缺陷。 1) 根据FOR /F 命令的帮助文件,会跳过空行。因此,文件中有多少行的计算可能不正确。您应该考虑使用带有/C 选项的FIND 命令。 2)如果在看到文件时间更改之前将多行写入文件,它将只打印最后一行。它不会看到已将两行、三行或多行写入文件。它有可能错过新的线路。 当然,随着文件越来越大,脚本会变得越来越慢,因为它必须读取整个文件以获取行数,然后跳过除最后一个之外的所有文件.

以上是关于批量 .txt 阅读器的主要内容,如果未能解决你的问题,请参考以下文章

如何批量TXT文本文件转换成HTML代码

Spring批量分页阅读器和异常处理

如何批量的把WORD文件变为TXT文件???

手机文本阅读器

批量把子文件夹的文件移动至上一层文件夹

Android简单的编写一个txt阅读器(没有处理字符编码),适用于新手学习