【问题标题】:how to detect change in .txt file using batch?如何使用批处理检测 .txt 文件的变化?
【发布时间】:2015-10-01 19:15:21
【问题描述】:

我做了一个简单的局域网聊天批处理文件,我想知道是否 有一个命令可以检查特定的 txt 文件是否已更新。 聊天记录存储在 log.dat 中,我希望在有新消息时有声音通知或类似的东西。

@echo off
title LAN chat reader
call Color.bat

:read
call Color.bat
cls
type log.dat
timeout /t 3 /nobreak >nul
goto read

(我是菜鸟,请告诉我这是否可能)

【问题讨论】:

  • 这是一个非常疯狂的想法(一批),但我喜欢竖起大拇指。 :)
  • 您所追求的设计不会有一个非常有效的聊天程序。我在stackoverflow.com/a/29967710/1012053 上发布了一个基本但有效的聊天批处理脚本。每个用户都有两个命令窗口——一个是用户键入消息的地方,另一个是显示来自所有来源的所有新消息的地方,每个窗口都有一个 userName: 前缀。
  • 我也有类似的聊天内容。 2 个用于读取/发送的寡妇和一个用于具有管理选项的操作员(例如颜色:保存在 color.bat 中)

标签: file batch-file updates


【解决方案1】:

要检查文件日期/时间,请使用 for%%~t 前缀:

@echo off
title LAN chat reader
setlocal enableDelayedExpansion

:read
    call Color.bat
    cls
    type log.dat

    for %%a in (log.dat) do set filetimesize=%%~tza
    :checkupdate
        ping -n 1 -w 100 localhost >nul
        for %%a in (log.dat) do if "!filetimesize!"=="%%~tza" goto checkupdate
    echo updated
    goto read

【讨论】:

  • 我试过了,但窗口会立即关闭(我使用的是 MP3 文件而不是 !FILENAME!这是问题吗?
  • 1.什么是!FILENAME!? 2. 做标准的事情:删除@echo off 并从命令提示符控制台运行批处理文件以实际查看问题所在。
  • 对不起,忘了!文件名!我得到了这个输出:=%~ta 目前没有预期。
  • 好的,我使用了更新的代码,但遇到了两个问题: 1 它只会更新一次,然后我必须重新启动它才能看到最新的聊天消息。 2 输出在哪里?像“start example.mp3”(可能是愚蠢的问题,但我一点也不高级)
  • 更新了代码。时间字符串没有秒数,所以我将文件大小添加到比较中。不明白你的第二个问题,但日志文件是用type 命令打印的。
【解决方案2】:

wOxxOm 已经提供了检查更新文件的解决方案。

这是一种产生声音的方法:

copy con bell.txt

然后在按住 ALT 的同时按 ALT 键输入 007,然后松开 ALT 键。 ^G 应该出现在您的屏幕上(= 0x07,这是一个响铃),然后按 Ctrl-Z。这为您提供了一个长度为 1 字节的文本文件

Type bell.txt

然后会发出哔哔声。

编辑更简单的方法来生成bell.txt:在命令行上输入echo ^G>bell.txt(生成^G,请按CTRL-G)。这将创建一个三字节文件(而不是使用 copy 技巧的一字节文件)(但这只是一个换行符,不应打扰)。

【讨论】:

  • 或者,您可以将 ECHO ^G 放入 .bat 脚本中。 “^G”是通过按 Ctrl+G 生成的。您的编辑器可能会或可能不会合作使用控制字符。请注意,“G”是罗马字母表中的第七个字母。
  • 或者嵌入一个 vbscript 代码,或者将chr(9) 直接打印到控制台,或者使用该字符创建一个临时文件。
猜你喜欢
  • 1970-01-01
  • 2017-11-29
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2014-08-11
  • 1970-01-01
相关资源
最近更新 更多