【问题标题】:Autohotkey check file checksumAutohotkey 检查文件校验和
【发布时间】:2021-05-11 20:11:46
【问题描述】:

我需要一个 AHK 脚本来检查/比较指定文件的 MD5 校验和值。

类似这样的:


'文件“%userprofile%\appsettings\app.ini”是否有MD5校验和值A465564D654E56464025456F

  • 如果是 Msgbox "not changed"

  • 如果没有 filedelete, "%userprofile%\appsettings\app.ini"

    • 然后: filecopy, "%userprofile%\appsettings\app.kackup", "%userprofile%\appsettings\app.ini"

退出脚本


我需要手动运行它 - 按需运行,而不是持久脚本。

我更喜欢它是一个 Autohotkey 脚本,但如果它太复杂,powershell 或批处理脚本也可以。

谢谢

【问题讨论】:

  • 你介意告诉我们你打算用这个做什么吗?
  • 这是一个定制的有问题的应用程序,它有时会弄乱它的配置文件,导致应用程序在下次运行时无法运行。所以我想要一个脚本来检查配置文件是否完整,如果没有,它将替换损坏的文件。出于性能原因,我不想在每次应用程序启动时都替换文件(好的配置文件解决了问题,但应用程序被重置为默认设置)。应用开发者离开了项目,目前没有人愿意修复它)。

标签: autohotkey checksum


【解决方案1】:

一种解决方案:

var:= ComObjCreate("WScript.Shell").Exec("cmd.exe /q /c CertUtil -hashfile %userprofile%/appsettings/app.ini MD5").StdOut.ReadAll()
outputArr := (StrSplit(var , "`r`n"))
out:=outputArr[2]
;MsgBox %out%

if(out=="A465564D654E56464025456F"){
    Msgbox not changed
    ExitApp
}
else{
    MsgBox Different MD5- restoring...
    filecopy, %userprofile%\appsettings\app.backup, %userprofile%\appsettings\app.ini, 1
    ExitApp
}

查看 MD5 散列部分的完整说明here。总结:

我们可以使用 Windows CertUtil 工具来查找 MD5 哈希值和 通过 StrSplitting 将输出解析为不同的行(MD5 和 本身将在第二行)。

脚本的其余部分只是一些逻辑来检查哈希是否与给定的哈希相同(A465564D654E56464025456F),如果不是,filecopy.backup1 .ini 文件中。请注意,如果我们赋予filecopy 覆盖文件的能力,我们不需要显式调用filedelete


1- 我认为您的意思可能是 .backup 文件而不是 .kackup 文件,但我可能错了。如果您想要 .kackup 文件,请将脚本中的 app.backup 替换为 app.kackup

【讨论】:

  • 非常感谢!我的意思是谢谢一百万!这正是我所需要的!它就像魅力一样! (是的,那个“.kackup”是一个错字,它应该是“.backup”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
相关资源
最近更新 更多