【问题标题】:Variable not printing (ECHO) inside IF statement of batch file批处理文件的 IF 语句中的变量不打印 (ECHO)
【发布时间】:2012-08-24 16:32:13
【问题描述】:

由于某种原因,我无法在 IF 语句中打印 %NetVerClientOrFull%。这真的很奇怪,因为它有时会,有时甚至在我不改变任何东西时也不会。我已经在多台机器上进行了测试,结果相同。如果我在 IF 语句中使用 %NetVer% ,则始终打印。有什么想法吗?

ECHO 客户端还是完整版? %NetVerClientOrFull%(应该显示 Client 或 Full,有时会显示)

@echo off
  set frameworkDirectory=Reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP"
  FOR /F "TOKENS=6 DELIMS=\." %%A IN ('%frameworkDirectory%') DO set NetVer=%%A
  ECHO The most current version of the .NET Framework installed is: %NetVer% 

  if "%NetVer%"=="v4" (
  set clientOrFullDirectory=Reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP\v4"
  FOR /F "TOKENS=7 DELIMS=\." %%A IN ('%clientOrFullDirectory%') DO set NetVerClientOrFull=%%A
  ECHO Client or Full? %NetVerClientOrFull%

  )

pause

要添加到这一点,它似乎在我的第三次运行时有效,没有意义:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Nick>C:\Users\Nick\Desktop\FrameworkVersionChecker.bat
The most current version of the .NET Framework installed is: v4
Client or Full?
Press any key to continue . . .

C:\Users\Nick>C:\Users\Nick\Desktop\FrameworkVersionChecker.bat
The most current version of the .NET Framework installed is: v4
Client or Full?
Press any key to continue . . .

C:\Users\Nick>C:\Users\Nick\Desktop\FrameworkVersionChecker.bat
The most current version of the .NET Framework installed is: v4
Client or Full? Full
Press any key to continue . . .

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    这是因为解析器在读取块时扩展变量,而不是在执行语句时。您在if () 块中的语句会看到变量,因为它们是在进入 到此块之前设置的。这个问题,以及如何克服它(通过使用延迟扩展)在set帮助中有很好的解释。只需从命令行执行help set - 甚至包含类似的示例。这里也有说明:windows batch SET inside IF not working

    为什么它会在第三次(以及后续)运行时打印?您不使用setlocal - 因此,当您下次执行批处理时,它将看到上次运行中设置的变量。删除或备注@echo off,并从新启动的控制台执行您的批处理。您将看到变量是如何扩展的,以及为什么它只在第 3 次以后才起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2020-02-13
      • 2017-08-01
      相关资源
      最近更新 更多