标题: [其他] 批处理如何获取文件md5? [打印本页]
作者: 304802301 时间: 2021-6-7 20:48 标题: 批处理如何获取文件md5?
1、第一段代码如下
(此代码是获取文件的md5,但遇到文件名字有空格的情况,会提示CertUtil: -hashfile 失败: 0x80070002 (WIN32: 2 ERROR_FILE_NOT_FOUND) CertUtil: 系统找不到指定的文件。如何解决?)- title md5批量生成脚本-by miles
- setlocal enabledelayedexpansion
- %~d0
- cd %~dp0
- if exist CMD-Name.txt del CMD-Name.txt
- for /R %%s in (.,*) do (
- echo %%s
- ) >>CMD-Name.txt
- if exist CMD-md5.txt del CMD-md5.txt
- for /f "skip=1" %%a in (CMD-Name.txt) do certutil -hashfile %%a MD5>>CMD-md5.txt
-
- echo md5生成完毕
复制代码
====================================================================================================================================
2、第二段代码如下
(此代码可以获取文件的md5,包括文件名字有空格的文件,也能获取大md5,但有个致命的缺点,就是只能获取当前文件夹的md5,下面的文件夹里的文件就没法获取了,如何优化?)- @echo off
- (for /f "delims=" %%i in ('dir /b /a-d') do (
- if "%%i" neq "%~nx0" (
- set /p =%%i <nul
- certutil -hashfile "%%i" MD5 | findstr /v "[^0-9a-z]"
- )
- ))>"MD5.txt"
复制代码
作者: Batcher 时间: 2021-6-7 21:24
回复 1# 304802301
第二段代码的第2行、第3行改成这样试试:
(for /f "delims=" %%i in ('dir /b /s /a-d') do (
if "%%~nxi" neq "%~nx0" (
作者: xp3000 时间: 2021-6-7 22:03
- @echo off & setlocal EnableDelayedExpansion
- type nul>"%~dp0MD5.log"
- for /f "delims=" %%a in ('dir /a-d /b /s *.*') do (
- if "%%~nxa" neq "%~nx0" (
- for /f "delims=" %%b in ('certutil -hashfile "%%a" MD5^|findstr /r /be /c:"[0-9a-f][0-9a-f ]*"') do (
- set "MD5=%%b"&set MD5=!MD5:^ =!&echo !MD5! = %%a>>"%~dp0MD5.log"
- )
- )
- )
- pause
复制代码
作者: semiuel 时间: 2021-6-9 09:37
第一段代码第10行中do certutil -hashfile %%a MD5>>CMD-md5.txt
给%%a加双引号,改成"%%a"
作者: 304802301 时间: 2021-6-11 10:51
回复 4# semiuel
我试过,不行的
不过还是感谢
作者: 304802301 时间: 2021-6-11 11:01
回复 2# Batcher
大佬,能否再帮我优化下,我这边有一个文件夹,里面有将近200万个小文件,我在8号执行的代码,目前已经运行了3*24小时了,txt里没有记录任何文件的md5,cmd窗口也还在运行中,没有输出任何内容。
我现在不清楚是进程卡住了还是正在执行中,也不知道执行的进度是多少了,我怀疑是先全部验证出mad5,驻留在内存中,全部验证完后再一次性写入到txt里。能否帮我优化下,验证出一个文件的md5就立即输出到txt里,方便我查看,感谢
作者: newswan 时间: 2021-6-11 11:33
没有问题,每个文件验证完毕写入一次
可能程序暂停了。。。
敲下回车空格,鼠标点一下cmd窗口。
作者: Batcher 时间: 2021-6-11 13:53
回复 6# 304802301 - @echo off
- type nul>"MD5.txt"
- for /f "delims=" %%i in ('dir /b /s /a-d') do (
- if "%%~nxi" neq "%~nx0" (
- echo Processing %%i
- set /p =%%i <nul >>"MD5.txt"
- certutil -hashfile "%%i" MD5 | findstr /v "[^0-9a-z]" >>"MD5.txt"
- )
- )
复制代码
作者: 304802301 时间: 2021-6-11 17:45
回复 304802301
Batcher 发表于 2021-6-11 13:53
大佬,这个bat在我本机(win10环境)下没问题(有路径+文件名,md5,且换行),但在服务器(win2008R2)环境下只能输出路径+文件名,无md5,且没有换行,是咋回事呢,。
作者: 304802301 时间: 2021-6-11 19:09
回复 8# Batcher
大佬 能不能在第一段代码的基础上,优化下文件名字有空格不能验证md5的问题。。第一段代码在服务器上是可以运行的,只不过文件名字有空格不能验证。
作者: went 时间: 2021-6-11 19:32
- @echo off & cd /d "%~dp0"
- set /a n=0
- (
- for /r %%i in (*) do (
- certutil -hashfile "%%i" MD5 | findstr /v "[^0-9a-z]"
- set /a "n+=1"
- call title %%n%%
- )
- )>"MD5.txt"
- pause&exit
复制代码
作者: went 时间: 2021-6-11 19:39
这个更快- @echo off & cd /d "%~dp0"
- set /a n=0
- (
- for /r %%i in (*) do (
- coder -show -action getmd5 -file "%%i" 2>nul
- echo;
- set /a "n+=1"
- call title %%n%%
- )
- ) > "MD5.txt"
- pause&exit
复制代码
coder.exe
作者: 304802301 时间: 2021-6-11 19:40
回复 11# went
能不能在这个基础上加一个路径和文件名?
完整的文件路径+文件名+MD5,换行。
感谢
作者: went 时间: 2021-6-11 19:45
回复 13# 304802301
路径|文件名|MD5- @echo off & cd /d "%~dp0"
- set /a n=0
- (
- for /r %%i in (*) do (
- set /p="%%i|%%~nxi|"<nul
- certutil -hashfile "%%i" MD5 | findstr /v "[^0-9a-z]"
- set /a "n+=1"
- call title %%n%%
- )
- ) > "MD5.txt"
- pause&exit
复制代码
作者: 304802301 时间: 2021-6-11 19:48
本帖最后由 304802301 于 2021-6-11 19:57 编辑
回复 14# went
大佬,这个语句不能用在服务器系统上吗?我本机win10无问题,服务器win2008 r2,有路径,有文件名,但无md5,也不会换行。。。。。。。。
作者: Batcher 时间: 2021-6-11 22:15
回复 9# 304802301
在服务器上,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: went 时间: 2021-6-11 23:45
回复 15# 304802301
12楼的呢
作者: 304802301 时间: 2021-6-11 23:49
回复 17# went
@echo off & cd /d "%~dp0"
set /a n=0
(
for /r %%i in (*) do (
coder -show -action getmd5 -file "%%i" 2>nul
echo;
set /a "n+=1"
call title %%n%%
)
) > "MD5.txt"
pause&exit
这个吗?输出的是空行
作者: went 时间: 2021-6-11 23:57
回复 18# 304802301
下载附件解压,coder.exe和bat文件放到一起http://www.bathome.net/thread-57518-1-1.html
作者: 304802301 时间: 2021-6-12 00:09
回复 19# went
使用了这个方法,有几点要反馈下:
1:我本机win10,验证md5的过程比较顺利,但在服务器win2008r2环境下,每验证一个文件的md5都会提示“编码解码工具1.0.2(Code By went) 已停止工作,Windows 可以联机检查该问题的解决方案。”点击关闭程序又能正常验证下一个文件。
2、输出的txt能否帮忙加上路径和文件名的?
作者: 304802301 时间: 2021-6-12 00:12
回复 19# went
问题签名:
问题事件名称: APPCRASH
应用程序名: coder.exe
应用程序版本: 1.0.0.0
应用程序时间戳: 6017b448
故障模块名称: KERNELBASE.dll
故障模块版本: 6.1.7601.24545
故障模块时间戳: 5e0eb7f5
异常代码: c0000005
异常偏移: 0000e082
OS 版本: 6.1.7601.2.1.0.274.10
区域设置 ID: 2052
其他信息 1: 0a9e
其他信息 2: 0a9e372d3b4ad19135b953a78882e789
其他信息 3: 0a9e
其他信息 4: 0a9e372d3b4ad19135b953a78882e789
联机阅读隐私声明:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804
如果无法获取联机隐私声明,请脱机阅读我们的隐私声明:
C:\Windows\system32\zh-CN\erofflps.txt
作者: went 时间: 2021-6-12 00:17
看看有没有能用的http://www.bathome.net/s/tool/index.html?key=md5
作者: 304802301 时间: 2021-6-12 00:43
回复 22# went
大佬,报错的问题我解决了(百度了下,禁用错误提示就行了),然后下面这个代码只有输出md5,能不能同时也输出路径和文件名的?就是路径+文件名+MD5+换行(没有其他的要求了)
@echo off & cd /d "%~dp0"
set /a n=0
(
for /r %%i in (*) do (
coder -show -action getmd5 -file "%%i" 2>nul
echo;
set /a "n+=1"
call title %%n%%
)
) > "MD5.txt"
pause&exit
作者: went 时间: 2021-6-12 11:49
- set /p="%%i|%%~nxi|"<nul
- coder -show -action getmd5 -file "%%i" 2>nul
- echo;
- set /a "n+=1"
复制代码
回复 23# 304802301
作者: 304802301 时间: 2021-6-14 19:45
回复 24# went
经验证,现在无问题了,感谢大佬。
附代码:(coder.asm、coder.exe、String.asm)三个文件与bat放一起,且电脑需要设置下:gpedit.msc→(计算机配置和用户配置,都要处理)→ 管理模板→Windows组件→Windows错误报告→(禁用Windows错误报告和组织显示用户界面上的关键错误,都要处理)→都设置成“已启用”)
@echo off & cd /d "%~dp0"
set /a n=0
(
for /r %%i in (*) do (
set /p="%%i|%%~nxi|"<nul
coder -show -action getmd5 -file "%%i" 2>nul
echo;
set /a "n+=1"
call title %%n%%
)
) > "cmd-get-md5-2.txt"
pause&exit
作者: went 时间: 2021-6-14 20:03
回复 25# 304802301
code.exe和bat两个文件就行了,asm文件是源码,可以丢弃
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |