bat文件enabledelayedexpansion在IF语句中不会扩展

时间:2017-05-02 21:17:06

标签: batch-file if-statement delayedvariableexpansion

当我尝试在.BAT文件IF语句中使用:clause 延迟扩展环境变量时,该行无法解析/执行。用%符号代替!用于扩建工程。相同的延迟扩展在其他地方有效,例如ECHO声明。例如:

@echo off& setlocal enabledelayedexpansion
set t=abcd
echo !t:~0,2!
if %t:~0,2% == ab echo equal
if !t:~0,2! == ab echo equal

echo!t:~0,2!正确生成:ab

if%t:~0,2%== ab echo equal 正确生成:相等

if!t:~0,2! == ab echo equal 发出错误: 2!此时出人意料

我不明白为什么我不能在IF语句中使用带有:的延迟扩展。如果没有冒号子句,IF语句中的延迟扩展可以正常工作。

1 个答案:

答案 0 :(得分:2)

问题不在于延迟扩张本身,而是内部的逗号 这是因为批处理解析器会在扩展百分比之后扩展延迟扩展表达式 因此IF解析器看到 !t:~0,2!并将逗号作为分隔符。

您可以通过使用引号来避免这种情况 或者逃避逗号。

if "!t:~0,2!" == "ab" echo equal
if !t:~0^,2! == ab echo equal

您可以在SO:How does the Windows Command Interpreter (CMD.EXE) parse scripts?

了解不同批处理解析器阶段的顺序