检测到更改时自动替换文件

检测到更改时自动替换文件

假设有一个文件A:\Example\file.txt

如果检测到该文件有任何更改,则会自动用文件替换B:\example\file.txt,并且不会出现文件替换对话框,也不会每次都出现 UAC 提示,一切都在后台进行。如果没有检测到任何更改,则什么也不做,脚本会继续在后台检查更改,同时希望消耗很少的系统资源。

我可以做:

Copy-Item "A:\Example\file.txt" "B:\Example\file.txt" -Force

但这并不是重复发生的,也不是一直在后台运行的,而且我不确定它是否可以自动跳过 UAC 提示或文件替换对话框。

答案1

您基本上需要一个以短间隔(例如每 5 分钟)运行的计划任务来检测更改。我想到的一个想法是,您可以对文件进行哈希处理,存储值,然后让计划任务再次对文件进行哈希处理,并将哈希值与存储的值进行比较。您似乎对 Powershell 很熟悉。Verion 4.0 及以上版本有一个 Get-FileHash cmdlet 可供使用。从那里,如果哈希值不同,则让您的脚本复制文件。

为了回应评论,这里有一些示例代码。StoredHash.txt 是一个文本文件,其中包含相关文件的哈希值。

$A = Get-Content "StoredHash.txt"
$B = Get-FileHash  -Algorithm MD5 -Path "A:\Example\file.txt"
If (-Not $A = $B)   
  {
  Copy-Item "A:\Example\file.txt" -Destination "B:\Example\file.txt"
  $B | Out-File "StoredHash.txt"   
  }

最后一行存储新的哈希,以便您可以查找后续更改。我没有测试此代码,因此它可能包含错误。但它应该足以让您入门。

相关内容