首页 > 解决方案 > 变量仅在 FOR 循环结束时设置,然后在下一次运行时挥之不去

问题描述

我有一个file.txt看起来像这样的文件:

string1a,string1b
string2a,string2b
string3a,string3b

我正在尝试运行以下批处理文件:

@echo off
For /F "usebackq tokens=1,2 delims=," %%a in ("file.txt") do (
echo The output is:
echo %%a
echo %%b
set var_1=%%a
echo %var_1%
echo %var_1:~6%
set var_2=%%b
echo %var_2%
echo %var_2:~6%
)

当我第一次运行它时,结果是:

The output is:
string1a
string1b
ECHO is off.
~6
ECHO is off.
~6
The output is:
string2a
string2b
ECHO is off.
~6
ECHO is off.
~6
The output is:
string3a
string3b
ECHO is off.
~6
ECHO is off.
~6

当我第二次运行它时,结果是:

The output is:
string1a
string1b
string3a
3a
string3b
3b
The output is:
string2a
string2b
string3a
3a
string3b
3b
The output is:
string3a
string3b
string3a
3a
string3b
3b

如果我将最后一行更改file.txt为:

string3x,string3y

并再次运行批处理文件,结果是:

The output is:
string1a
string1b
string3a
3a
string3b
3b
The output is:
string2a
string2b
string3a
3a
string3b
3b
The output is:
string3x
string3y
string3a
3a
string3b
3b

如果我再次运行批处理文件,结果是:

The output is:
string1a
string1b
string3x
3x
string3y
3y
The output is:
string2a
string2b
string3x
3x
string3y
3y
The output is:
string3x
string3y
string3x
3x
string3y
3y

谁能解释这里发生了什么?我首先期待的结果是:

The output is:
string1a
string1b
string1a
1a
string1b
1b
The output is:
string2a
string2b
string2a
2a
string2b
2b
The output is:
string3a
string3b
string3a
3a
string3b
3b

不知何故,该变量似乎直到FOR循环的第三次迭代才被设置,然后它在批处理文件的下一次运行中徘徊。我试图在每次迭代中设置var_1和在当前迭代中的值。var_2%%a%%b

标签: for-loopbatch-file

解决方案


解决方案似乎在于启用延迟扩展,因此批处理文件应该是:

@echo off
setlocal EnableDelayedExpansion 
For /F "usebackq tokens=1,2 delims=," %%a in ("file.txt") do (
echo The output is:
echo %%a
echo %%b
set var_1=%%a
echo !var_1!
echo !var_1:~6!
set var_2=%%b
echo !var_2!
echo !var_2:~6!
)

推荐阅读