Windows 如果变量比较神秘地不起作用,则批处理

Windows 如果变量比较神秘地不起作用,则批处理,windows,batch-file,cmd,Windows,Batch File,Cmd,我想创建一个batchfile,它读取2个不同的值,并根据它们的比较方式进行相应的处理。然而,这种比较从未奏效。代码是: REM string1 and string2 contain the following test string "---------- COUNT.TXT 14" from which the number at the very right will be extracted in the next lines: REM read numbers from string

我想创建一个batchfile,它读取2个不同的值,并根据它们的比较方式进行相应的处理。然而,这种比较从未奏效。代码是:

REM string1 and string2 contain the following test string "---------- COUNT.TXT 14" from which the number at the very right will be extracted in the next lines:
REM read numbers from strings and save as variables

set /a var1 =%:string1:~22,2%
set /a var2 =%:string2:~22,2%

IF #var1# == #var2# (
...
)
你知道为什么条件/比较永远不起作用吗?“SET var”显示两个变量相等(var1=14,var2=14),但在中,如果它们没有被识别为相等的话。任何指导都将不胜感激


顺便说一句,字符串是find/c(find and count)的第二个输出行。

您的作业中有多余的、不需要的冒号。这两行内容应如下:

set /a var1 =%string1:~22,2%
set /a var2 =%string2:~22,2%
变量名后面的空格是可以的,但只有在使用SET/A时才可以。最好改掉在那里放空格的习惯,这样赋值就可以在没有
/A
选项的情况下正常工作

下面创建名称中带有空格的变量-通常不是一个好主意:

set var1 =%string1:~22,2%
set var2 =%string2:~22,2%
因此,最好使用

set /a var1=%string1:~22,2%
set /a var2=%string2:~22,2%


如果%var1%==%var2%。。。(不是
#
)或者可以肯定的是:
如果“%var1%”==“var2%”

顺便说一下:您的字符串看起来几乎像是
find/c
的输出。如果是这样,缺少的冒号只是一个输入错误,您可以使用以下命令拆分字符串:

for /f "tokens=2 delims=:" %%i in ("%string1%") do set /a var1=%%i 
或者更简单:

set /a var1=%string1:*: =%
(从开头删除,直到(包括)
(冒号空格)(这甚至不需要
/a


无需在意,如果是两位数字或一位或六位…

REM string1和string2包含以下测试字符串“------------COUNT.TXT:14”
set/a var1=%string1::=%
set/a var2=%string2::=%
如果不是“%var1%”,则为“%var2%”(回声不相等)


总结建议这就是工作代码的外观,应特别注意匹配语法,包括看似无害的空格。

1/变量名称末尾有空格。2/不要使用
/a
。只需
设置var=blah
。感谢提示,但以下内容尚未更改:set var1=%:string1:~22,2%set var2=%:string2:~22,2%IF#var1#==#var2#(…)if语句中有空格。@面条-这些问题通常是问题,但在本例中不是。提取的值是一个数字,因此SET/a很好,SET/a可以使用额外的空格。很好的建议,现在我意识到在cmd中设置变量值时,这个看似无害的空格的相关性。谢谢!if现在可以很好地工作了。输出实际上是从
find/c
的书面输出读取的第二行(我的描述中缺少冒号)。您建议的字符串用法更好,而且不局限于可能的位数。非常感谢!这里有一句话是,尽管字符串提取在以下两种情况下都能很好地工作:
set/a var1=%string1::::=%
set var1=%string1:::=%
似乎只有在使用
/a
开关时,我们才会这样做能够让IF工作,例如:
如果不是“%var1%”==“var2%”(…)
。我希望是正确的(即使非常幼稚)。
set /a var1=%string1:*: =%