FOR / F中的变量

时间:2012-08-07 08:53:00

标签: batch-file dos

我是新手写批处理文件 我有一个simple.txt及其内容:

aaa 1
bbb 2
ccc 3
bbb 4
aaaa 5
aaccdd 7

并运行批处理文件:

@echo off
FOR /F "tokens=2 delims= " %%a in ('FindStr "aa" ^"simple.txt^"') DO (
    SET TEMP_VAR=%%a
    echo %TEMP_VAR%
)

结果是

7
7
7

但我期待的是

1
5
7

为什么会这样?我认为它是循环的类C或类似Java。它和它们真的不一样吗?

1 个答案:

答案 0 :(得分:3)

学习批次的人的经典问题: - )

在循环执行之前解析整个FOR循环,包括括号的内容。正常%TEMP_VAR%扩展是作为解析的一部分进行的,因此您看到的值是执行循环之前存在的值。

解决方案很简单:在顶部添加setlocal enableDelayedExpansion,然后使用!TEMP_VAR!

@echo off
setlocal enableDelayedExpansion
FOR /F "tokens=2 delims= " %%a in ('FindStr "aa" ^"simple.txt^"') DO (
    SET TEMP_VAR=%%a
    echo !TEMP_VAR!
)

HELP文档提供了问题的描述。从命令行键入HELP SETSET /?。正常与延迟扩张的描述从顶部开始约为2/3。