Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 用于/F的变量_Batch File_Dos - Fatal编程技术网

Batch file 用于/F的变量

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 为什么会发生这种情况?我所想的是类似

我是新写批处理文件的 我有一个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循环。它真的与它们不同吗?

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

整个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