批量 - 通过FOR循环中的IF语句设置变量"卡住"

时间:2015-01-26 12:11:05

标签: variables batch-file if-statement for-loop

我正在处理这个从输入文件中读取列的lil'脚本:

@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=2,3,4,5,7,8,9,12,14" %%a IN ('type %1') do (
    set event="NULLA"
    echo %event% - %%h
    if "%%h"=="i" ( set event=FELTOLTES )
    echo %event% - %%h
    if "%%h"=="o" ( set event=LETOLTES )
    echo %event% - %%h
    if "%%h"=="d" ( set event=TORLES )
    echo %event% - %%h  
    echo ---------------------
}

但是,如果我运行它,所有步骤中的%event%变量(即使是if "%%h"=="i"之前的第一个),输入文件的所有行都是“TORLES”,它在最后的IF声明:

TORLES - i
TORLES - i
TORLES - d
TORLES - i  
TORLES - d
TORLES - d
TORLES - o
TORLES - d

我在这里做错了吗?尝试在IF语句周围添加删除引号,但没有成功。

1 个答案:

答案 0 :(得分:1)

@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=2,3,4,5,7,8,9,12,14" %%a IN ('type %1') do (
    set event="NULLA"
    echo !event! - %%h
    if "%%h"=="i" ( set event=FELTOLTES )
    echo !event! - %%h
    if "%%h"=="o" ( set event=LETOLTES )
    echo !event! - %%h
    if "%%h"=="d" ( set event=TORLES )
    echo !event! - %%h

    echo ---------------------
)

当您使用延迟展开并尝试在括号上下文中设置/访问变量时,您需要使用!代替%

来访问它