LoginSignup
3
4

More than 5 years have passed since last update.

Windows標準コマンドでHashを取得するバッチ!

Posted at

はじめに

WindowsでたくさんのファイルのHashを取得する際に、
いちいちコマンド打つのは面倒くさいため、いい感じのバッチファイルにしました。
それに出力形式がとてもイケていないから

バッチファイル(説明)

例ではSHA256を求めていますが、下記ハッシュ値に対応しているため、
(MD2/MD4/MD5/SHA1/SHA256/SHA384/SHA512)
他のアルゴリズムのHashを求めたい場合は、
定義部分のset HashMethod=SHA256をset HashMethod=MD5等に変更して使用してください。

使用方法

下記をoutputHash.batとして作成し、
Hashを取得したいファイルをドラッグ&ドロップすると、
バッチファイルと同じ階層にHashのテキストが出力されます。

outputHash.bat
@echo off

:: 使用方法
if "%~1" == "" (
echo Hashを求めたいファイルをドラッグ&ドロップしてください
pause
)

:: 定義
setlocal
set CmdName=CertUtil
set HashMethod=SHA256
set OutputPath=%~dp0\outputHash.txt

for %%a in (%*) do for %%f in (%%a) do call :PrintFileHash "%%~f"
exit /b 0
:PrintFileHash
set Hash=
for /f "usebackq delims=" %%h in (`%CmdName% -hashfile "%~1" %HashMethod% ^| find /v "%HashMethod%" ^| find /v "%CmdName%:"`) do set Hash=%%h
:: ファイルサイズが0だとエラーになるので例外処理
if "%Hash%" == "" if "%~z1" == "0" (
set Hash="ファイルサイズが0です"
) else (
exit /b 0
)

:: 間のスペースを削除
set Hash=%Hash: =%

:: OutputPath(.batファイルと同じ階層)に出力
:: 1ファイル毎に改行
echo%~n1%~x1(%HashMethod%)>> "%OutputPath%"
echo %Hash%>> "%OutputPath%"
echo;>> "%OutputPath%"

おわりに

Gitのリポジトリを公開しておきますので、こうした方が良い!
などありましたらプルリクエストいただけると嬉しいです!

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4