我是新手写批处理文件 我有一个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。它和它们真的不一样吗?
答案 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 SET
或SET /?
。正常与延迟扩张的描述从顶部开始约为2/3。