Batch file 用于/F的变量
我是新写批处理文件的 我有一个simple.txt及其内容:Batch file 用于/F的变量,batch-file,dos,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 为什么会发生这种情况?我所想的是类似
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循环。它真的与它们不同吗?学习批处理的人的经典问题:-) 整个FOR循环(包括括号的内容)在循环执行之前进行解析。正常的
%TEMP\u VAR%
扩展是作为解析的一部分进行的,因此您看到的值是执行循环之前存在的值
解决方案很简单:在顶部添加setlocalenabledelayedexpansion
,然后使用!临时工代码>取而代之
@echo off
setlocal enableDelayedExpansion
FOR /F "tokens=2 delims= " %%a in ('FindStr "aa" ^"simple.txt^"') DO (
SET TEMP_VAR=%%a
echo !TEMP_VAR!
)
帮助文档提供了问题的说明。从命令行键入HELP SET
或SET/?
。正常扩张与延迟扩张的描述从顶部向下约2/3