Bir değişiklik algılandığında dosyayı otomatik olarak değiştir


1

Bir dosya olduğunu hayal edin A:\Example\file.txt

Bu dosyada herhangi bir değişiklik tespit edilirse, otomatik olarak B:\example\file.txtdosyayla değiştirilir ve dosya değiştirme iletişim kutusu görüntülenmeden veya her seferinde görünen bir UAC isteminde bulunmazsa, her şey arka planda gerçekleşir. Herhangi bir değişiklik tespit edilmezse, hiçbir şey yapılmazsa, komut dosyası arka plandaki değişiklikleri kontrol etmeye devam ederken umarım çok az sistem kaynağı tüketir.

Yapabilirim:

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

Ancak bu sürekli olarak tekrar etmiyor ya da arka planda çalışmıyor ve UAC istemlerini veya dosya değiştirme iletişim kutularını otomatik olarak atlayıp atlayamayacağından emin değilim.


1
Lütfen superuser.com'un ücretsiz bir script / kod yazma servisi olmadığını unutmayın . Bize şu ana kadar neler denediğinizi söylerseniz (zaten kullanmakta olduğunuz komut dosyalarını / kodu ekleyin) ve nerede kaldığınızı söylerseniz, belirli sorunlarla ilgili yardım etmeye çalışabiliriz. Ayrıca okumalısınız. Nasıl iyi bir soru sorabilirim? .
DavidPostill

1
Biraz daha iyi :)
DavidPostill

@MagicallyDelicous Her dakikayı değiştirmek dosya değişikliklerini algılamıyor, değil mi? Dosyanın gerçekte değiştirilip değiştirilmediğine bakılmaksızın sadece her dakika dosyayı değiştirir, bu tercih ederim.
Buffer Over Read

@MagicallyDelicous Genel olarak dosya değişirse değiştirilmesini istiyorum. Karma tabanlı bir çözüm gibi bir şey işe yarayabilir, ancak her seferinde hash kontrol etmenin sistem üzerinde yoğun olup olmadığından emin değilim. İdeal olarak, betiğin arka planda en az kaynakla çalışmasını istiyorum.
Buffer Over Read

1
Tipik olarak bunu yapmanın bir dosya sistemi izleyicisini kullanmak olduğu gibi ilginç bir şey. Böylece, dosyanın değiştiğini hatırlatır ve işlem yaparsınız; örneğin, yeni dosyayı kopyalayın, elbette, bu izlemekte olduğunuz dosyanın üzerine yazdığınız aynı çağrıyı tetikler, böylece sonsuz bir döngüye girersiniz. pastebin.com/NmHuigtL
Yardım, El

Yanıtlar:


1

Bir değişikliği saptamak için temelde kısa aralıklarla çalışan - yani her 5 dakikada bir - zamanlanmış bir göreve ihtiyacınız olacak. Akla gelen bir fikir, dosyayı toplayabilmeniz, değeri saklayabilmeniz ve ardından zamanlanmış görevinizde dosyayı yeniden elde edip hash değerini saklanan değerle karşılaştırabileceğinizdir. Powershell'i tanıyor gibisiniz. Verion 4.0 ve üzeri, kullanabileceğiniz bir Get-FileHash cmdlet'ine sahiptir. Buradan, karmalar farklıysa betiğinizin dosyayı kopyalamasını isteyin.

Yoruma cevap olarak, işte bazı örnek kod. StoredHash.txt, söz konusu dosyanın karma değerini içeren bir metin dosyasıdır.

$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"   
  }

Son satır, yeni karmayı depolar, böylece daha sonra bir değişiklik arayabilirsin. Bu kodu test etmedim, bu yüzden hata içerebilir. Ama başlamana yetecek kadar olmalı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.