批处理中的奇怪行为 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 获取内容。
我正在处理一个非常简单的批处理脚本
我正在考虑使用 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 获取内容。