批处理中的奇怪行为IF语句

时间:2015-01-28 15:55:45

标签: batch-file if-statement text

我有一个非常简单的批处理脚本,我正在处理

我正在考虑在本地实现一个带有wget和版本文件的更新程序并托管在我的服务器上(但由于某种原因我正在使用Batch)

@echo off
for /f "tokens=* delims=" %%x in (version.txt) do set version=%%x 
if "%version%" == "1.0.0" (echo yes)

它引用的文本文件只包含

1.0.0

甚至没有换行。回应%version%在控制台中给我1.0.0,但if语句什么都没有。

有人想指出我的错误吗?说实话,我是无能为力的

2 个答案:

答案 0 :(得分:3)

你似乎在set命令的末尾有一个顽皮的空间。

批处理对SET语句中的空格敏感。 SET FLAG = N将名为“FLAG Space ”的变量设置为值“ Space N”

语法SET "var=value"(其中value可以为空)用于确保任何杂散尾随空格不包含在分配的值中。 set /a可以安全地使用“无报价”。

答案 1 :(得分:2)

这很棘手。 set version=%%x的末尾有一个空格。

作为脚本约定的一般要点,每当您在批处理脚本中将变量设置为字符串时,除非您有特殊原因不这样做,否则应该使用引用的var = value对set "variable=value" 。这有助于避免这样的问题。您的for /f行应以set "version=%%x"

结尾

使用尾随空格,你基本上是在说if "1.0.0 " == "1.0.0",这是假的。

作为旁注,如果您愿意,可以从您的网络服务器without using wget获取内容。