Board logo

标题: [文本处理] 批处理如何判断文件变化后输出到控制台? [打印本页]

作者: 帝尊    时间: 2022-3-23 10:42     标题: 批处理如何判断文件变化后输出到控制台?

有一个文本在一直在写入。
是否可以根据MD5或者文件修改时间进行对比。
有变化就输出。没变化就继续对比。
作者: Batcher    时间: 2022-3-23 11:30

回复 1# 帝尊


把变化后的文本内容输出到控制台吗?
是不是类似于Linux的tail命令,或者试试BareTail这个软件?
作者: 帝尊    时间: 2022-3-23 14:21

回复  帝尊
把变化后的文本内容输出到控制台吗?
是不是类似于Linux的tail命令,或者试试BareTail这 ...
Batcher 发表于 2022-3-23 11:30

就是最后一个echo %%i

第一步就是把把一个文本所有内容输出到控制台。
然后获得这个文本的MD5
有一个程序会对这个文本进行修改。
批处理检测到MD5变化后,再把这个文本重新输出到控制台。就这么个东西。
虽然反复刷新清屏也能获得这个效果。
但是我想弄一个MD5检测的方式。
  1. if defined md5 (
  2.     if not "%md5%" == "%md5New%" (
  3.         for /f "skip=1 tokens=1,* delims=" %%i in (%nnn%) do echo %%i & set "%md5New%" = "%md5%"
  4.         FIND /I "Pass" %nnn% >nul 2>nul
  5.         IF "%ERRORLEVEL%"=="0" (
  6.         for /f "skip=1 tokens=1,* delims=" %%i in (%nnn%) do echo %%i
  7.         pause
  8.         exit
  9.     ) else (
  10.         Goto :check
  11.     )
  12. )
复制代码
大佬帮我写一个呗?
让我学学。谢谢了。
作者: idwma    时间: 2022-3-23 15:20

尝试一下用事件来实现
  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. $f=gi 'qwer.txt'
  3. $d=$f.DirectoryName
  4. $fsw = New-Object IO.FileSystemWatcher $d -Property @{
  5.     IncludeSubdirectories = 1
  6.     EnableRaisingEvents = 1
  7. }
  8. Register-ObjectEvent $fsw -EventName Changed -Action {
  9.     $fp=$event.SourceEventArgs.FullPath
  10.     if($fp -eq $f.fullname){cls;gc $f.fullname|write-host}
  11. }
  12. cls
  13. while(1){
  14. Wait-Event -Timeout 1
  15. }
复制代码

作者: Batcher    时间: 2022-3-23 18:10

回复 3# 帝尊


推荐试试命令行工具 tail.exe 作用和Linux的tail命令一样:
http://bcn.bathome.net/s/tool/index.html?key=tail
  1. tail.exe -f "1.txt"
复制代码

作者: 帝尊    时间: 2022-3-24 00:15

回复 5# Batcher
试了一下。tail.exe -f -n 100 "P.txt" 我想第一行不显示,但是这个命令好像没这个功能。
而且我比较喜欢默认的CMD。第三方的还是不用了。谢谢了。
作者: Batcher    时间: 2022-3-25 08:51

回复 6# 帝尊


    每隔一段时间就会有人冒出来一个跟你差不多的想法,遗憾的是Windows的CMD没有自带这样的命令。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2