以下是我的代碼。字符串的兩個變量字符串比較
@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