Hash 生成文件的哈希值

Hash 生成文件的哈希值,hash,vbscript,Hash,Vbscript,我已经设法收集代码并尝试生成文件的哈希值,但在当前代码中,我需要将文件拖到VBScript上,然后它会给出哈希值 有人能帮我重新编写代码吗?我可以选择文件夹或一组文件,哈希值可以生成并写入记事本文件 附上下面的代码 Dim objFile,objFolder,objFSO 暗参数,strText strText=“” 设置objFSO=CreateObject(“Scripting.FileSystemObject”) 如果WScript.Arguments.Count>0,则 对于Wscrip

我已经设法收集代码并尝试生成文件的哈希值,但在当前代码中,我需要将文件拖到VBScript上,然后它会给出哈希值

有人能帮我重新编写代码吗?我可以选择文件夹或一组文件,哈希值可以生成并写入记事本文件

附上下面的代码

Dim objFile,objFolder,objFSO
暗参数,strText
strText=“”
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
如果WScript.Arguments.Count>0,则
对于Wscript.Arguments中的每个参数
Arg=微调(Arg)
如果仪表(参数“.”),则
strText=strText&“文件名:”&Arg&vbNewLine
如果是doMd5那么
strText=strText&“MD5-->”&MD5(Arg)&vbNewLine
如果结束
如果结束
下一个
如果结束
'=0参数意味着使用双击的md5.vbs(或可能通过没有文件名参数的命令行执行)
模糊名称
如果WScript.Arguments.Count=0,则
fName=ChooseFile(“.”)
如果fName“”则
strText=strText&“文件名:”&fName&vbNewLine
如果是doMd5那么
strText=strText&“MD5-->”&MD5(fName)&vbNewLine
如果结束
Wscript.echo strText“在将数据插入记事本时,需要使用它来防止事情变得疯狂(以某种方式确保记事本是顶部窗口)
如果结束
如果结束
'如果用户取消了“打开文件”对话框中的文件选择,请优雅地退出
如果strText=“”,则
暗拉伸
strExit=“未选择任何文件,优雅地退出…”vbNewLine
strExit=strExit+“别忘了也可以将文件拖放到此脚本上。”&vbNewLine
strExit=strExit+”或使用脚本中详细说明的“发送到”右侧上下文菜单。“&vbNewLine
MsgBox strExit,0,“MD5.VBS”
WScript.Quit
如果结束
昏暗的地狱
设置WshShell=WScript.CreateObject(“WScript.Shell”)
WshShell.运行“记事本”,3
WScript.Sleep 500
WshShell.SendKeys strText
函数md5(文件名)
Dim-MSXML,EL,MD5Obj
设置MD5Obj=CreateObject(“System.Security.Cryptography.MD5CryptoServiceProvider”)
MD5Obj.ComputeHash_2(readBinaryFile(文件名))
设置MSXML=CreateObject(“MSXML2.DOMDocument”)
Set EL=MSXML.CreateElement(“tmp”)
EL.DataType=“bin.hex”
EL.NodeTypedValue=MD5Obj.Hash
md5=EL.Text
端函数
函数readBinaryFile(文件名)
常量adTypeBinary=1
暗流
设置objStream=CreateObject(“ADODB.Stream”)
objStream.Type=adTypeBinary
对象流。打开
如果文件名为“”,则
objStream.LoadFromFile filename在此处进行轻微修改,以防止在未选择任何文件时出现错误消息
如果结束
readBinaryFile=objStream.Read
objStream,关闭
设置objStream=Nothing
端函数
Dim shell、defaultLocalDir、objWMIService、colItems、objItem、ex
Set shell=CreateObject(“WScript.shell”)
defaultLocalDir=shell.ExpandEnvironmentStrings(“%USERPROFILE%”)&“\Desktop”
Set shell=无
函数选择文件(ByVal initialDir)
设置objWMIService=GetObject(“winmgmts:\\。\root\cimv2”)
Set colItems=objWMIService.ExecQuery(“从Win32\u操作系统中选择*)
暗淡的winVersion
winVersion=CInt(左(objItem.version,1))
下一个
设置objWMIService=Nothing
设置colItems=Nothing
如果(winVersion请参阅一部分,另一部分请参阅。在发布有关简单问题的问题之前,请搜索此网站并使用Google。

我们开始:

Set fso = CreateObject("Scripting.FileSystemObject")
Dim oMD5:  Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
Dim oLog 'As Scripting.TextStream

Set oArgs = WScript.Arguments

If oArgs.Count = 1 Then
    sFolderPath = GetFolderPath()
    Set oLog = fso.CreateTextFile(sFolderPath & "\FileHash.csv", True)
    oLog.Write "sep=" & vbTab & vbCrLf
    CheckFolder oArgs(I)
    oLog.Close
    Msgbox "Done!"
Else
    Msgbox "Drop Folder"
End If

Sub CheckFolder(sFolderPath)
    Dim sKey
    Dim oFolder 'As Scripting.Folder
    Set oFolder = fso.GetFolder(sFolderPath)

    For Each oFile In oFolder.Files
        oLog.Write oFile.Path & vbTab & GetMd5(oFile.Path) & vbCrLf
    Next

    For Each oChildFolder In oFolder.SubFolders
        CheckFolder oChildFolder.Path
    Next
End Sub

Function GetFolderPath()
    Dim oFile 'As Scripting.File
    Set oFile = fso.GetFile(WScript.ScriptFullName)
    GetFolderPath = oFile.ParentFolder
End Function

Function GetMd5(filename)
    Dim oXml, oElement

    oMD5.ComputeHash_2(GetBinaryFile(filename))

    Set oXml = CreateObject("MSXML2.DOMDocument")
    Set oElement = oXml.CreateElement("tmp")
    oElement.DataType = "bin.hex"
    oElement.NodeTypedValue = oMD5.Hash
    GetMd5 = oElement.Text
End Function

Function GetBinaryFile(filename)
    Dim oStream: Set oStream = CreateObject("ADODB.Stream")
    oStream.Type = 1 'adTypeBinary
    oStream.Open
    oStream.LoadFromFile filename
    GetBinaryFile= oStream.Read
    oStream.Close
    Set oStream = Nothing
End Function

我已将代码更改为在Excel VBA中工作,但是它在零字节文件上崩溃,您是否尝试创建新的文本文件,然后将其拖动到vbs中?如果它无法从零长度文件中获取MD5,则没有任何用处。