1

我是编写批处理文件的新手,我有一个 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 的 for 循环。真的和他们不一样吗?

4

1 回答 1

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 SET或。SET /?正常与延迟扩展的描述从顶部向下大约 2/3。

于 2012-08-07T12:07:18.340 回答