标题: [特效代码] [已解决] 批处理如何利用md5检查两个文件的一致? [打印本页]
作者: zcop20 时间: 2011-8-15 21:57 标题: [已解决] 批处理如何利用md5检查两个文件的一致?
本帖最后由 zcop20 于 2011-8-15 22:29 编辑
md5.exe工具使用这个:http://www.fourmilab.ch/md5/md5.zip
通常为(例):
C:\>md5.exe "D:\文件A.rar"
345C0D0106233189C09F3B9E15B0D079 D:\文件A.rar
本来想利用 %str:~0,32% 命令来对照两个文件md5的一致性,
文件一致时执行 echo verify check ok,不一致时执行 echo verify check error
但又不知道如何将md5数值加到变量中....
若是有其他好的办法可以达到目的也是可以的(只要不要使用输出文件\文本的方式来比较md5)
感谢各位
作者: CrLf 时间: 2011-8-15 22:07
举个例子,也许你就懂了:- for /f %%a in ('md5.exe "D:\文件A.rar"') do set md5=%%a
- echo %md5%
复制代码
作者: zcop20 时间: 2011-8-15 22:28
感谢版主 ^^
作者: zcop20 时间: 2011-8-16 09:20
发现一个新问题: 当目录存在括号等怎么办?把右括号后边的给忽略了....
比如:
for /f %%a in ('"%~dp0md5.exe" D:\新建文件夹 (3)\文件A.rar') do set md5a=%%a
会提示:
此时不应有 \文件A.rar')。
若给文件A路径加双引号""也不对:
'D:\新建文件夹' 不是内部或外部命令,也不是可运行的程序或批处理文件。
作者: CUer 时间: 2011-8-16 19:26
回复 4# zcop20
试试转义:
D:\新建文件夹 ^(3^)\文件A.rar
作者: zcop20 时间: 2011-8-16 20:25
回复 5# CUer
感谢指点
但是这对于空格路径又不行了...
D:\新建文件夹^(3^)\文件A.rar ---可以
D:\新建文件夹 ^(3^)\文件A.rar ---不行
作者: CUer 时间: 2011-8-16 20:32
回复 6# zcop20
再加上双引号呢?
作者: zcop20 时间: 2011-8-16 21:21
回复 7# CUer
双引号试过的 不行...
'D:\新建文件夹' 不是内部或外部命令,也不是可运行的程序或批处理文件。
测试的路径是 D:\新建文件夹 (3)
作者: andyrave 时间: 2011-8-17 09:44
中文字符 有问题
试试纯字母
作者: zcop20 时间: 2011-8-17 10:25
回复 9# andyrave
本来是想用 "%~dp0md5.exe" "%~dp0文件A.rar" 做个批处理,
用以应对将批处理文件、md5.exe、要校验的文件A 三者同时放在任意目录都能校验
没想到被路径所限了
作者: CrLf 时间: 2011-8-17 10:46
本帖最后由 CrLf 于 2011-8-17 10:47 编辑
回复 4# zcop20
for /f 从命令获取输入时有个特性,当发现参数首尾都存在双引号时,会自动把它去掉再执行,所以那句可以改成:- for /f %%a in ('@"%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar"') do set md5a=%%a
- ::用 @ 避免以双引号打头,而又符合语法,这应该是最优方案
复制代码
当然还有其他方案,不过都有明显缺点:- for /f %%a in ('^>con "%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar"') do set md5a=%%a
- ::同样的原理,只是这里改用重定向,缺点是不够简洁
复制代码
- for /f %%a in ('""%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar""') do set md5a=%%a
- ::多给一对双引号,不过这样一来反括号就跑到引号对之外了,需要另行转义
复制代码
或者- for /f %%a in ('call "%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar"') do set md5a=%%a
- ::因为此处使用了 call 来,效率会降低至少三分之一
复制代码
- "%~dp0md5.exe" "D:\新建文件夹 (3)\文件A.rar"|for /f %%a in ('more') do set md5a=%%a
- ::缺点和 call 一样,用时至少多一半
复制代码
再或者- for /f %%a in ('%~dps0md5.exe "D:\新建文件夹 (3)\文件A.rar"') do set md5a=%%a
- ::使用短名,避免绝对路径中存在空格的情况,但是若存在特殊字符 ) 将导致for命令出错,而若存在 &,后果不堪设想
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |