How can I generate an MD5 sum for a folder on Windows?
Solution 1
None of these quite did what I needed so I came up with this alternative...
@echo off
for /R . %%f in (*.*) do (
echo | set/p="%%f - "
certutil -hashfile "%%f" MD5 | findstr /V ":"
)
Outputs in the format "<Path><Filename> - <Hash>" at one line per file.
Solution 2
If you want to use a GUI, I can recommend Fsum Frontend.
Fsum Frontend is a free and easy-to-use tool that allows to compute message digests, checksums and HMACs for files and text strings. It supports drag-and-drop and you can handle multiple files at once. The checksum generated can be used to verify the integrity of the files.
It supports 96 algorithms: [...] md5 [...]
As the name implies, Fsum Frontend is a GUI for (among others) SlavaSoft fsum.
A fast and handy command line utility for file integrity verification. It offers a choice of 13 of the most popular hash and checksum functions for file message digest and checksum calculation.
Its features include:
- Possibility to act recursively. FSUM can operate not only on files from a specific directory, but also on files from all subdirectories of the specified directory;
- Work with large size files. (Tested on file sizes of up to 15 GB);
- Full compatibility with md5sum utility
Solution 3
You can achieve the equivalent to your Unix command (minus the sorting) with the following:
for /R . %f in (*.*) do @certutil -hashfile "%f" MD5
You can change the dot (.
) for whatever folder you want to recurse from, and the *.*
to whatever file mask you need in order to narrow down your file set.
Solution 4
PowerShell provides loop statement, some people may prefer this syntax
foreach($f in dir){ certutil -hashfile "$f" md5}
Reference: https://en.wikiversity.org/wiki/PowerShell/Loops
Solution 5
Late to the question but finding only unaccepted answers here is what I have found:
function Get-FolderHash ($folder) {
dir $folder -Recurse | ?{!$_.psiscontainer} | %{[Byte[]]$contents += [System.IO.File]::ReadAllBytes($_.fullname)}
$hasher = [System.Security.Cryptography.SHA1]::Create()
[string]::Join("",$($hasher.ComputeHash($contents) | %{"{0:x2}" -f $_}))
}
Copy and paste this code to PowerShell console and type:
Get-FolderHash "C:\CustomFolder"
Runtime may vary depending on folder contents.
Klangen
Updated on September 18, 2022Comments
-
Klangen almost 2 years
There are several posts about generating MD5 sums for files and/or folders on various Windows platforms. However, none of these worked for me. I tried:
- Windows CertUtil:
CertUtil -hashfile myFileName MD5
returns "Access is denied" on all folders (mycmd
is running with admin privileges), - HashTab: does not show up in the Properties dialog in Explorer as advertised,
- Summer Properties: does not show up in the Properties dialog either,
- HashCheck: does not allow MD5 for folders, only files,
- md5checker: does not compute the MD5 of the entire folder (only files in it).
At this point I am starting to get a bit desperate. Please note that I am using Windows 7 x64.
For info, if possible, I am trying to find a tool that would allow something like this in Linux:
find DIR -type f -exec md5sum {} \; | sort -k 2 | md5sum
-
Biswapriyo about 6 yearsMake a ZIP and hash it.
-
Klangen about 6 years@Biswapriyo That would work, except I have very large folders with hundreds of GB in them...
-
Ramhound about 6 yearsCertUtil only works on files. You would have to write a PowerShell script to loop through each file contained in a folder. If you were using Windows 10 you could use WSL calculate the hash.
-
user1686 about 6 yearsNote that there is no standard method for hashing a folder (which isn't a single byte stream but an unordered collection), so different programs will give different results.
- Windows CertUtil:
-
Biswapriyo about 6 yearsCan it be done with any build in command line tools? And without using any 3rd party tools?
-
Ramhound about 6 years@Biswapriyo - No; It's a GUI application for a third-party utility. The user didn't preclude the use of third-party applications, even if they did, does not change the fact this is an appropriate solution.
-
Scott - Слава Україні over 5 years“… easier to understand and use” than what? I find the CMD-language
for /R . %f in (*.*) do
to be just as easy to understand and use as the PowerShell version. -
Endle_Zhenbo over 5 yearsPersonally, I prefer the syntax with {}. You're right, I should avoid the subjective words in my answer
-
user2480144 over 3 yearsCrashes when your path contains some uncommon chars.