因此,基本上,我希望批处理文件读取.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
答案 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
@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
要获取有关任何命令的帮助,请执行以下操作: