批量 .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
@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 阅读器的主要内容,如果未能解决你的问题,请参考以下文章