This script add-in adds a GetHash
command which gets the selected files' hashes and outputs them to a dialog, clipboard, or text file.
(Not to be confused with the built-in GetSizes command, which can calculate hashes and display them in file display columns.)
History:
- 2016-07-04: Fixed incomplete display
Script File:
- GetHash.vbs.txt (7.7 KB)
- Download the file and drag it to Preferences / Toolbars / Scripts to install it.
Button Example:
To use this, you must have installed the script above.
See How to use buttons and scripts from this forum for how to paste the button code on to your toolbar.
<?xml version="1.0"?>
<button backcol="none" display="both" label_pos="right" separate="yes" textcol="none">
<label>Show &MD5 and SHA</label>
<tip>Show selected files' MD5 and SHA hashes</tip>
<icon1>#misc</icon1>
<function type="normal">
<instruction>@disablenosel:files</instruction>
<instruction />
<instruction>GetHash MD5 SHA MODE=DIALOG </instruction>
</function>
</button>
Script Code:
The script code from the download above is reproduced here for reference:
option explicit
' GetHash
' qiuqiu (c) 2015
'
' This is a script for Directory Opus.
' See http://www.gpsoft.com.au/DScripts/redirect.asp?page=scripts for development information.
'
'
'
' Called by Directory Opus to initialize the script
Function OnInit(initData)
initData.name = "GetHash"
initData.desc = "Get Select Files Hash Code To Dialog,Clipboard,File."
initData.copyright = "qiuqiu (c) 2015"
initData.version = "1.0"
initData.default_enable = True
Dim cmd
Set cmd = initData.AddCommand
cmd.name = initData.name
cmd.method = initData.name
cmd.desc = initData.desc
cmd.label = initData.name
cmd.template = "MD5/S,SHA/S,MODE/K[Dialog,CLIPBOARD,FILE]"
End Function
' Implement the GetHash command
Function GetHash(scriptCmdData)
Dim MsgDlg, File, FileCount, DirCount, ForCount, DlgMsg, HashProgress, HashFile
FileCount = 0 : DirCount = 0 : ForCount = 0
Set HashProgress = scriptCmdData.Func.command.progress
With HashProgress
.abort = True
.bytes = True
.delay = False
.full = True
.owned = True
.pause = False
.skip = False
.Init scriptCmdData.func.sourcetab.lister, "Hash Progress"
.SetTitle "Calculate Hash"
.InitFileSize
.AddFiles scriptCmdData.Func.Command.Files.Count
.Show
End With
For ForCount = 0 to scriptCmdData.Func.Command.Files.Count - 1
If HashProgress.GetAbortState = "a" Then Exit Function
set File = scriptCmdData.Func.Command.Files(ForCount)
HashProgress.SetName File.Name
If (File.Is_dir) Then
DirCount = DirCount + 1
HashProgress.SkipFile False
Else
DlgMsg = DlgMsg & vbCRLF & "File:" & vbTab & File.Name & vbCRLF
If (scriptCmdData.func.args.got_arg.md5) And (HashProgress.GetAbortState <> "a") Then
HashProgress.SetStatus "Calculating MD5, Please Waiting...."
DlgMsg = DlgMsg & "MD5:" & vbTab & DOpus.FSUtil.Hash(File.realpath, "MD5") & vbCRLF
End If
If (scriptCmdData.func.args.got_arg.sha) And (HashProgress.GetAbortState <> "a") Then
HashProgress.SetStatus "Calculating SHA-1, Please Waiting...."
DlgMsg = DlgMsg & "SHA-1:" & vbTab & DOpus.FSUtil.Hash(File.realpath, "SHA") & vbCRLF
End If
FileCount = FileCount + 1
HashProgress.SkipFile True
End If
HashProgress.StepFiles 1
Next
HashProgress.Hide
DlgMsg = "Item Count: " & scriptCmdData.Func.Command.Files.Count & vbTab & vbTab & "Calculated: " & FileCount & vbTab & vbTab & "Skipped: " & DirCount & vbCRLF & String(37, "=") & Trim(DlgMsg)
'to clipboard
If InStr(1, UCase(scriptCmdData.Func.args.Mode), UCase("Clipboard"), vbBinaryCompare) Then
DOpus.SetClip DlgMsg
End If
'to file
If InStr(1, UCase(scriptCmdData.Func.args.Mode), UCase("File"), vbBinaryCompare) Then
WriteToFile scriptCmdData.Func.Command.Source & "\Hash File.txt", DlgMsg, True
End If
'to MsgDlg
If InStr(1, UCase(scriptCmdData.Func.args.Mode), UCase("Dialog"), vbBinaryCompare) Then
Set MsgDlg = scriptCmdData.Func.Dlg
With MsgDlg
.Window = scriptCmdData.func.sourcetab.lister
.title = "Hash Completed"
.buttons = "OK"
.message = DlgMsg
.Show
End With
End If
Set File = Nothing
Set DlgMsg = Nothing
Set HashProgress = Nothing
End Function
Function BuildString (in_Str, length)
buildString = in_Str & Space(length - Len(in_Str))
End Function
Sub WriteToFile(FileName, Text, Mode)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f, iomode
Set fso = CreateObject("Scripting.FileSystemObject")
if Mode = True then
iomode = ForWriting
Else
iomode = ForAppending
End If
Set f = fso.OpenTextFile(FileName, iomode, True, True)
f.Write Text
f.Close
Set f = Nothing
Set fso = Nothing
End Sub