以下是我的代码。字符串的两个变量字符串比较
@ECHO off SETLOCAL ENABLEDELAYEDEXPANSION SET targetFile=%1 SET targetMD5=%2 ::read MD5 CALL md5.exe -n %targetFile% > md5.txt FOR /f "tokens=* delims=" %%i in (md5.txt) do ( SET FileMD5=%%i ) ECHO "FileMD5=%FileMD5%" DEL md5.txt ::read MD5.txt SET /A row=0 FOR /f "tokens=* delims=" %%f in (%targetMD5%) do ( SET OrgMD5=%%f ) ECHO "OrgMD5=%FileMD5%" ::compare IF "%FileMD5%" EQU "%OrgMD5%" ( ECHO 1 ) ELSE ( ECHO The target file was modified. ECHO 0 ) ENDLOCAL
然而,结果是:
"FileMD5=468C15F33FC55E6A388D505024ED723A" "OrgMD5=468C15F33FC55E6A388D505024ED723A" The target file was modified. 0
我觉得FileMD5是一样的OrgMD5。但是EQU运营商并不这么认为。
如果我删除引号,代码变成:
::compare IF %FileMD5% EQU %OrgMD5% ( ECHO 1 ) ELSE ( ECHO The target file was modified. ECHO 0 )
结果是:
"FileMD5=468C15F33FC55E6A388D505024ED723A" "OrgMD5=468C15F33FC55E6A388D505024ED723A" 1 The target file was modified. 0
如果我的代码更改为:
::compare IF "%FileMD5%" EQU "468C15F33FC55E6A388D505024ED723A" ( ECHO 1 ) ELSE ( ECHO The target file was modified. ECHO 0 )
结果我想要什么,但MD5代码不应该总是468C15F33FC55E6A388D505024ED723A。
"FileMD5=468C15F33FC55E6A388D505024ED723A" "OrgMD5=468C15F33FC55E6A388D505024ED723A" 1
========================================= =====
我很尴尬的错误的代码。所以我纠正了下面的问题。
::read MD5.txt
SET /A row=0
FOR /f "tokens=1 delims= " %%f in (%targetMD5%) do (
SET OrgMD5=%%f
GOTO compare
)
:compare
ECHO "FileMD5=%FileMD5%"
ECHO "OrgMD5=%OrgMD5%"
IF "%FileMD5%" EQU %OrgMD5% (
GOTO pass
) ELSE (
GOTO fail
)
:pass
ECHO 1
GOTO :eof
:fail
ECHO The target file was modified.
ECHO 0
GOTO :eof
ENDLOCAL
但是,这些“比较”总是会“失败”。
"FileMD5=468c15f33fc55e6a388d505024ed723a"
"OrgMD5=468c15f33fc55e6a388d505024ed723a"
The target file was modified.
0
'ECHO“OrgMD5 =%FileMD5%''应该是'ECHO'OrgMD5 =%orgMD5%''显示'orgmd5'的值 – Magoo
我建议使用'for/F”delims =“%% I in ('md5.exe -n%targetFile%')设置“FileMD5 = %% I”而不是'CALL md5.exe -n%targetFile%> md5.txt'和'FOR/f“标记= * delims = “%% i in(md5.txt)do('和接下来的两行,在命令提示符窗口中运行for /?'以获得多个页面上该命令输出的帮助。”'delims =“'选项字符串没有必要,如果'md5.exe'只输出MD5总和而没有别的。 – Mofi
使用[fc](https://ss64.com/nt/fc.html)来验证相同的文件(只是为了确保.. ) – Stephan