
批處理不用第三方工具實現文件校驗碼的核對支持碼長為 16、32、40、64、96、128位使用方式:Hash_Check.cmd Check_file.md5 [Disp_ID]Check_file.md5輸入文件,必須符合核驗文檔的相關標準Disp_ID輸出控制,只有在數據量很大時有用,缺省時顯示全部數據示例:Hash_Check.cmd d:testtest.SHA128將以下文字以ANSI的格式保存為“Hash_Check.cmd”
- @echo off
- @rem MD5_1616
- @rem MD532
- @rem SHA140
- @rem SHA25664
- @rem SHA38496
- @rem SHA512128
- setlocal enabledelayedexpansion
- @rem 顯示指令狀態
- echo;正在執行:&&echo;%~0 %~1 &&echo;
- @rem 初始化擴展名支持列表
- for /f delims== %%a in ('set ext_[ 2^>nul') do set %%a=
- set ext_[.MD5]=True
- set ext_[.SHA]=True
- set ext_[.SHA1]=True
- set ext_[.SHA128]=True
- set ext_[.SHA256]=True
- set ext_[.SHA384]=True
- set ext_[.SHA512]=True
- set ext_[.MD5SUM]=True
- set ext_[.MD5SUMS]=True
- set ext_[.SHA1SUMS]=True
- set ext_[.SHA256SUMS]=True
- set ext_[.SHA512SUMS]=True
- @rem 檢查數據文件類型是否為本腳本所支持
- call set ext_Code=%%ext_[%~x1]%%
- if not defined ext_Code (
- echo;
- echo;不支持的數據文件擴展名:%~x1 (腳本只支持擴展名為以.sha或.md5開頭的數據文件,如:d:testtest.SHA128)
- goto :ExitBatch
- )
- @rem 初始化本腳本支持的Hash類型
- for /f delims== %%a in ('set sha_[ 2^>nul') do set %%a=
- set sha_[16]=MD5
- set sha_[32]=MD5
- set sha_[40]=SHA1
- set sha_[64]=SHA256
- set sha_[96]=SHA384
- set sha_[128]=SHA512
- @rem 初始化計數器
- set /a FilesNo=0
- set /a File1No=0
- set /a FilesEr=0
- set /a File1Er=0
- set /a Hash0Er=0
- set /a Hash1Er=0
- set /a Folders=0
- @rem 初始化strlen函數內斂到變量_strlen中,用于測試字符串長度(0~8K);入口參數#1,返回變量##
- set _strlen=set $=^!#1^!#&set ##=&(for %%z in (4096 2048 1024 512 256 128 64 32 16)do if ^!$:~%%z^!. NEQ . set/a##+=%%z&set $=^!$:~%%z^!)&set $=^!$^!fedcba9876543210&set/a##+=0x^!$:~16,1^!
- @rem 初始化校驗有效數據的輸出狀態:存在參數2(%2)則不輸出,反之則輸出
- if [%~2]==[] (set Ef_Disp_ID=True) else (set Ef_Disp_ID=)
- @rem 切換for指令的默認工作文件夾
- cd /d %~dp1
- @rem 用for指令讀取數據:忽略#開頭的行,每行只切為2段,其分隔符為* (放置在最后可實現空格與星號任意組合)。
- for /f usebackq eol=# tokens=1,* delims=* %%a in (%~1) do (
- set /a FilesNo+=1
- set ListNo=!FilesNo!.
- set ListNo=!ListNo:~-5!
- set Dir_a=%%~ab
- if not defined Dir_a (
- echo;!ListNo!%%~fb 文件不存在(×)
- set /a FilesEr+=1
- ) else if [!Dir_a:~0,1!]==[d] (
- echo;!ListNo!%%~fb 是文件夾,忽略(×)