1

当我尝试在 .BAT 文件 IF 语句中使用 : 子句延迟扩展环境变量时,该行无法解析/执行。使用 % 符号代替 ! 用于扩建工程。相同的延迟扩展适用于其他地方,例如 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

回声 !t:~0,2 ! 正确产生:ab

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

if !t:~0,2 ! == ab echo equal发出错误: 2!这时候出乎意料

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

4

1 回答 1

2

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

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

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

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

于 2017-05-02T21:29:06.457 回答