Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Расчет контрольной суммы CRC 
Author Message
Flasher



PostPosted: Tue May 19, 2015 01:42    Post subject: Reply with quote

Вспомнилось. В обсуждении с SVM тут и тут была мысль написать аналог рекурсивного создания файлов с размерами только уже с CRC. Вот что вышло:
Code:
'===================================================================================
' Создание/перезапись хэш-файла в активном каталоге или в каждой ветви его структуры
' Ссылка на утилиту RHash: http://sourceforge.net/projects/rhash/files/rhash/

' Условия: путь запуска - пустой;
'          положить в каталог программы 64-битную версию с именем rhash64.exe

' Параметры: <хэш-формат> <маска расширения> <не/включать рекурсию: 0/1>
' Хэш-формат: crc32, md4, md5, sha1, sha-224, sha-256, sha-384, sha-512, sha3-224,
' sha3-256, sha3-384, sha3-512, tiger, tth, has160, aich, ed2k, gost-cryptopro,
' gost, btih, ripemd160, whirlpool, snefru128, snefru256, edon-r256, edon-r512

' Примеры:  md5 *.* 0  |  sha1 *.avi 1

' Автор: Flasher ©
'===================================================================================
Option Explicit
Dim RHash, Alg, Filt, Test, ShA, Ext, Ps, Flt, FN, Title, Path, F, Items, Sum, Fold
'========================== Путь к утилите RHash (32 bit) ==========================
RHash = """%COMMANDER_PATH%\Utils\RHash\rhash.exe"""
'===================================================================================
With WScript.Arguments Alg = .Item(0) : Filt = .Item(1) : Test = .Item(2) End With
Dim C(2), WSH : Set WSH = CreateObject("WScript.Shell")
Ext = Alg : Set ShA = CreateObject("Shell.Application")
Select Case Alg : Case "crc32" Ext = "sfv" : Case "sha1" Ext = "sha" End Select
If InStr(Alg, "sha-") Then Ext = "sha" & Mid(Alg, 5)
If Filt <> "*.*" Then Ps = UCase(Mid(Filt,3)) : Flt = "_for_" & Ps Else Ps = "(объекты)"
If WSH.Environment("System")("PROCESSOR_ARCHITECTURE") = "AMD64" Then _
RHash = Left(RHash, InStrRev(RHash, ".") - 1) & "64.exe"""
ForFolder WSH.CurrentDirectory, FN : Title = " Создание CRC-файлов " & Ucase(Ext)
If C(0) = "" Then
  MsgBox "Файлы " & Ps & " отсутствуют!", 48, Title
ElseIf C(0) = 1 And C(1) = "" Then WSH.Run """%COMMANDER_EXE%"" /O /S /L=""" & FN & """"
Else MsgBox Ucase(Ext) & "-файлов:" & String(2, vbTab) & C(0) & vbCr &_
"Контрольных сумм:" & vbTab & C(2), 64, Title & " (результат) :" End If

Sub ForFolder(Path, F)
  Set Items = ShA.NameSpace(Path).Items
  Items.Filter  64, "*." & Ext
  If Items.Count = 1 And Filt = "*.*" Then _
  F = Items.Item(0).Path Else F = Path & "\Checksum" & Flt & "." & Ext
  Items.Filter 192, Filt : Sum = Items.Count
  If Sum Then
    Items.Filter 64, Right(F, Len(F) - InStrRev(F,"\")): If Items.Count Then Sum = Sum - 1
    WSH.Run RHash &_
    " -i -p""%{" & Alg & "} *%f\n"" -o""" & F & """ """ & Path &"\" & Filt & """", 0, True
    With CreateObject("ADODB.Stream")
      .Open : .CharSet = "UTF-8" : .LoadFromFile F : .Type = 1 : .SaveToFile F, 2 : .Close
    End With : C(0) = C(0) + 1 : C(2) = C(2) + Sum
  End If
  If Test Then
    Items.Filter 160, "*"
    If Items.Count Then C(1) = 1 : For Each Fold in Items : ForFolder Fold.Path, F : Next
  End If
End Sub
Для TC, как известно, актуальны: crc32, md5, sha1, sha-256, sha-512. Поддерживаются имена с Юникодом.
+ Автопереход к корневому CRC-файлу при отключённой рекурсии.
К сожалению, обновление по --update отпало, RHash косячит, дописывая суммы во все соседние текстовые файлы.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group