2014-07-08 108 views
0

我运行这段代码批处理文件变量显示

SETLOCAL EnableDelayedExpansion 
SET count=1 
FOR /F "tokens=* delims= usebackq" %%x IN ("%myfilepath.txt%") DO (
SET POS=%%x 
echo %POS% 
) 
ENDLOCAL 

但输出

SET POS = viawizard 
echo is on 
+0

[在一个for循环初始化批处理文件变量]的可能重复(http://stackoverflow.com/questions/691047/batch-file-variables-initialized-in-a-for-loop) –

回答

0

你看被分配给变量的值,但你不能访问这个值

当一个代码块(括号中的代码)被解析时,所有的变量读取将被中的变量开始执行之前的值替换因此,在执行时,因为没有对变量的读取,所以如果变量中的值在块内部更改,则无法访问更改后的值。

启用延迟扩展,你可以改变它的工作方式。如果变量的值在块内部变化,并且您需要从同一个块内访问已更改的值,那么可以/必须将此变量的的语法更改为!var!(在同一个案例中的任何变量),指示给解析器,变量中的读操作将被延迟直到执行该命令。

@echo off 

    SETLOCAL EnableDelayedExpansion 
    SET count=1 
    FOR /F "usebackq delims=" %%x IN ("%myfilepath.txt%") DO (
     SET "POS=%%x" 
     echo !POS! 
    ) 
    ENDLOCAL 
+0

由于它工作1 – shruti