BAT skripta na WIN 7 i checksum

Nadovezujem se na moj stari post.

Kako u skriptu za kopiranje fajlova ubaciti proveru za checksum.
Ja za kopiranje koristim robocopy, a on nema ugrađenu verifikaciju (the default value of Robocopy is (unless you specify something different via parameters) that it will copy any file where the Timestamp OR the file size differs).
xcopy – ima ugrađenu verifikaciju, ali SAMO po veličini fajla
xxcopy – plaća se
teracopy – plaća se, a uz to je GUI

Kao hash algoritam javljaju se sledeće mogućnosti :
* SFV – simple file verification koristi CRC32 checksums
* CRC – cyclic redundancy checking for detect accidental changes to raw data, veoma staro
* MD5 – star, može da služi samo za proveru slučajnih grešaka pri kopiranju, koristi 128 bitni hash
* SHA-1 – noviji, ima hash od 160 bita, i koristi message digest, sigurniji je od MD5, ali se može “provaliti”. Ako je kopiranje unutar sigurne mreže (kao kod mene), sasvim je dovoljan.

PowerShell opcije
copy-item – nema opciju da kopira samo novije fajlove

PowerShell za poredjenje hash-a fajlova (radi!!!!!) :
PS D:\Moja Dokumenta\Testiranje> ((Get-FileHash “.\test1.txt”).hash) -eq ((Get-FileHash “Z:\Testiranje\test1.txt”).hash)

Microsoft ima odvojeni (free) programčić za checksum (MD5 i SHA1) : FCIV, ali to onda treba “ugraditi” u npr robocopy 🙁
Fciv po default-u radi MD5 hash.

Ja bi da program koji kopira ima u sebi ugrađenu i verifikaciju, ali toga nigde nema.

Komanda “verify” koja se uključuje i isključuje u cmd-u, ta komanda istina samo proverava da li se kopirani fajl može čitati…..

Robocopy kako dobiti samo spisak fajlova koji ce se kopirati :
D:\Moja Dokumenta\Testiranje>robocopy . Z:\Testiranje test*.txt /np /nc /ns /ndl /l /njh /njs
D:\Moja Dokumenta\Testiranje\test1.txt
D:\Moja Dokumenta\Testiranje\test2.txt
D:\Moja Dokumenta\Testiranje\test3.txt
******************************
Napravila sam PowerShell skriptu PS1 koja radi checksum, i koju poziva robocopy BAT skripta :
$lokacijaoriginal=”D:\Moja Dokumenta\Testiranje\”
$lokacijakopija=”Z:\Testiranje\”

#pretvaram fajl u array
$spisakfajlova = get-content .\spisakfajlova.txt

#broj smislenih linija (prva je blanko)
$max = $spisakfajlova.count -1

echo “broj-smislenih-linija-u-fajlu-je $max”
echo —– >> kopiranjeXXXXX.txt

#iz array-a sklanjam tabove
$spisakfajlova = $spisakfajlova -replace ‘\t’

#iz array-a sklanjam dva uzastopna space-a
$spisakfajlova = $spisakfajlova -replace ‘ ‘

#pravim spisak kopija kloniranjem originalnog spiska
$spisakfajlovakopija = $spisakfajlova.clone()

#ubacujem lokaciju na koju je kopirano
$spisakfajlovakopija = $spisakfajlovakopija.replace($lokacijaoriginal,$lokacijakopija)

#stampanje celog/dela originalnog array-a
echo original >> kopiranjeXXXXX.txt
$spisakfajlova >> kopiranjeXXXXX.txt
echo —– >> kopiranjeXXXXX.txt

#stampanje celog/dela kopiranog array-a
echo kopija >> kopiranjeXXXXX.txt
$spisakfajlovakopija >> kopiranjeXXXXX.txt
echo —– >> kopiranjeXXXXX.txt

#poredjenje hash-ova
$n = 1
while($n -le $max) {
echo “sad-je-n $n” >> kopiranjeXXXXX.txt
((Get-FileHash $spisakfajlova[$n]).hash) -eq ((Get-FileHash $spisakfajlovakopija[$n]).hash) >> kopiranjeXXXXX.txt
$n = $n+1
}

A BAT skripta je poziva na svom kraju, ovako :
powershell.exe -ExecutionPolicy Bypass -Command “.\test.ps1”