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

Odd behavior IF statement in Batch

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

我正在考虑使用 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 语句什么也得不到。

有人想指出我的错误吗?老实说我一窍不通

你在 set 命令的末尾似乎有一个调皮的 space。

批处理对 SET 语句中的 spaces 敏感。 SET FLAG = N 将名为 "FLAGSpace" 的变量设置为值“SpaceN”

语法 SET "var=value"(其中值可能为空)用于确保分配的值中不包含任何杂散尾随 space。 set /a 可以放心使用 "quoteless".

这很棘手。 set version=%%x 末尾有一个 space。

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

结尾

尾随 space,你基本上是在说 if "1.0.0 " == "1.0.0",这是错误的。

附带说明一下,如果您愿意,可以从您的 Web 服务器 without using wget 获取内容。