0

我有一个在 win XP 上运行的 cmd 脚本,它输出一个文本文件:

:start
>outputfile.txt (findstr /v "^#" info.txt || echo No text available)
ping 127.0.0.1
goto start

它检查 info.txt 中的数据,如果它不以 # 开头,则创建包含相同文本的 outputfile.txt。ping 仅用作一种简单的延迟策略。

现在我需要类似的东西来从 info.txt 中获取数据(前提是它不以 # 开头)并将其添加到 outputfile.txt 中已有的内容中。但前提是 info.txt 中的文本已更改!(将 > 更改为 >> 将给出相同文本的大量重复)。

这让我的大脑受伤了。请给我一些指示。谢谢。

4

1 回答 1

0
@echo off

set DataFile=info.txt
set OutputFile=outputfile.txt
set SavedSize=0

goto start

:filesize
set CurrentSize=%~z1
exit /b

:start
call :filesize %DataFile%
if %SavedSize% neq %CurrentSize% (>%OutputFile% (findstr /v "^#" %DataFile% || echo No text available))
set SavedSize=%CurrentSize%
ping 127.0.0.1 >nul
goto start

这个想法是保存以前的数据文件大小并等到它被改变。

这不是一个理想的解决方案(因为我们需要info.txt为每个文件更改复制所有数据)并且如果有人info.txt在脚本运行时删除行,它可能无法正常工作。最好使用一些哈希算法(例如,MD5),但不幸的是标准的 CMD 工具集不包含任何合适的东西。

如果这些限制对您很重要,我建议使用一些命令行散列实用程序(例如this)或某种更强大的脚本语言(Python、Perl、Powershell)。

于 2012-09-21T02:00:48.223 回答