【问题标题】:Odd behavior IF statement in Batch批处理中的奇怪行为 IF 语句
【发布时间】:2015-01-28 15:55:44
【问题描述】:

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

我正在考虑在本地实现一个带有 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 语句什么也得不到。

有人想指出我的错误吗?老实说,我一无所知

【问题讨论】:

    标签: batch-file if-statement text


    【解决方案1】:

    set 命令的末尾似乎有一个顽皮的空格。

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

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

    【讨论】:

    • 所以,我想我明白你在说什么
    • 哎呀,换行的 cmets
    • 我稍微修改了脚本 @echo off for /f "tokens=* delims=" %%x in ("%CD%\version.txt") do set /a curr=%%x if "%curr%" == "1.0.0" (echo yes) 现在它告诉我参数错误(特别是当我添加 /a 时)
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多