2016-07-07 40 views
0

我不熟悉Windows批处理脚本。 尝试从文本文件Ignore.txt文件中获取值,并将它们存储为本地变量。在Windows批处理中从for循环获取标记值

命令文件:

@Echo off 
setlocal enabledelayedexpansion 

for /F "tokens=1,2,3" %%i in (Ignore.txt) do (
    echo. %%i 
    echo. %%j 
    echo. %%k 

    set value1=%%i 
    set value2=%%j 
    set value3=%%k 
) 

Echo. Value1: !value1! 
Echo. Value2: !value2! 
Echo. Value3: !value3! 

Endlocal 

Ignore.txt:

*.svc 
*.jpg 
*.png 

但结果只打印一个变量太错:

输出:

*.svc 
*.jpg 
*.png 

Value1: *.png 
Value2: 
Value3: 

请帮助我,如果我在这里做任何错误。还有关于其他更好的检索方式的建议。

+1

的'for'循环在处理一行时间,并且文件中的行只有一个标记(将被'%% i'消耗),所以'%% j'和'%% k'都是NULL。 – CristiFati

+0

@CristiFati,如果是这种情况,echo是如何正确打印值的? – sunny24365

+4

_Ignore.txt_有3行:'for'循环执行3次,每次只执行'echo。 %% i'在屏幕上产生输出,另外两个(因为变量是NULL /空)被'@Echo off'抑制。 – CristiFati

回答

1

fortoken选项的帮助中包含该位:

tokens=x,y,m-n - specifies which tokens from each line are to 
       be passed to the for body for each iteration. 

换句话说,它只会把一个单一的行成多个变量。脚本的运行证明了这一点:它输出每一行,但是在空行%% j和%% k之间输出空行。

如果要分析此文件到不同的变量,你需要跟踪你是哪个行手动,像这样的东西:

@Echo off 
setlocal enabledelayedexpansion 

set _digit=1 
for /F %%i in (Ignore.txt) do (
    echo. %%i 

    set value!_digit!=%%i 
    set /a _digit=!_digit!+1 
) 

Echo. Value1: !value1! 
Echo. Value2: !value2! 
Echo. Value3: !value3! 

Endlocal