使用批处理脚本检测文件损坏
Posted
技术标签:
【中文标题】使用批处理脚本检测文件损坏【英文标题】:Detecting file corruption with batch script 【发布时间】:2011-09-07 09:12:45 【问题描述】:我如何使用命令来检查新文件的大小是否明显小于它正在替换的文件?
我每天晚上运行一个批处理文件,除其他外,它调用一个应用程序UpdVMem.exe
,它从主文件Members.Adt
创建一个缩减成员数据库VMembers.Adt
。然后使用相同的脚本将此文件移动到远程站点。
在一些站点上,VMembers.Adt 会定期损坏。我不知道为什么,因为我们已经排除了表格被锁定以进行编辑(通过我的 Delphi Membership 软件)。它通常会看似大小相同,但包含的记录不到一半。
更好的是一组命令,可以检测到这种损坏或UpdVMem.exe
执行失败,因为单独的大小并不是最好的指标。
谢谢
【问题讨论】:
您使用的是哪种副本?有像 Unixrsync
这样的专门程序可能比普通的副本更好。
它只是使用标准(复制 'source' 'destination' ),但 VMembers 文件在生成时已损坏,因此这不是问题所在。
如果你想检测一些东西,你需要一个规则。你的规则是什么?文件大小 您可以使用ERRORLEVEL 命令查看批处理文件中UpdVMem.exe
的退出代码。如果 UpdVMem.exe 是由您开发的,那么您可以使用Halt 过程将“有意义的错误代码”发送到批处理文件(即当您在创建 VMembers.Adt 文件时捕获一些异常时)。
【讨论】:
谢谢,这是一个理想的解决方案,因为 UpdVMem.exe 是我自己开发的,所以我可以在它可能失败的地方设置一个或多个暂停。但是,由于我目前无法找到最新的来源,有没有 ERRORLEVEL 的替代品?因为当前的错误级别始终为 0 我不确定你在寻找什么样的替代方案......如果你的意思是用其他方式(而不是检测 UpdVMem.exe 失败)来检测 VMembers.Adt 文件是否损坏,那么我可以'不要像你写的那样想任何东西“它通常会看似相同的大小,但包含的记录不到一半”,这排除了检查文件大小的可能性。因此,唯一的方法似乎是编写一个特殊的程序,在覆盖旧文件之前验证文件。 你是对的,除非我找到源代码并重试,否则我必须编写一个使用 recordCount 或异常并重试的验证程序。这对于 MS 命令来说有点太高级了:p以上是关于使用批处理脚本检测文件损坏的主要内容,如果未能解决你的问题,请参考以下文章