以下是我的代码。
import groovy.transform.builder.Builder @Builder class Foo { Map prop } def map = [a:1, b:2] def f = Foo.builder().prop(map).build() assert map == f.prop // or you can use f.getProp()
然而,结果是:
@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与OrgMD5相同。但EQU运营商并不这么认为。
如果我删除引号,代码变为:
"FileMD5=468C15F33FC55E6A388D505024ED723A" "OrgMD5=468C15F33FC55E6A388D505024ED723A" The target file was modified. 0
结果是:
::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
结果是我想要的,但MD5代码不应该总是468C15F33FC55E6A388D505024ED723A。
::compare IF "%FileMD5%" EQU "468C15F33FC55E6A388D505024ED723A" ( ECHO 1 ) ELSE ( ECHO The target file was modified. ECHO 0 )
============================================== < / p>
我对错误的代码感到尴尬。所以我在下面更正了它。
"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
答案 0 :(得分:1)
在您进行的编辑中,您正在比较"%FileMD5%" EQU %OrgMD5%
。
只是为了更简单的例子,在FileMD5
和OrgMD5
中设想值为foo
。
然后比较将产生:"foo" EQU foo
一次引用,一次不引用。
所以你在这里有两个选择:在一边留下引号(通常不应该这样做)或者把它们放在另一边。
其他建议:为了逃避潜在的批处理元字符,我总是用它来比较:"x%var%" EQU "x%otherVar%"
(带引号和前导x),以确保我没有在运行时可能不需要它们的地方。
注意:在@Aacini中注明their comment,x无关紧要。这是我曾经接过的东西,直到现在才放弃。