无法使用“FOR”命令设置变量

时间:2014-02-27 09:00:00

标签: batch-file

我正在尝试从“for / f”命令中设置几个变量,当我回应它们时总是得到“ECHO关闭”:

ipst.txt文件:

1     10.1.1.10
3     10.1.3.10
8     10.1.3.10

批处理文件:

@ECHO OFF
set Computerslist=ipst.txt

for /f "tokens=1,2" %%A in (%Computerslist%) do (
    set StationNumber=%%A
    set StationIP=%%B
    echo %StationNumber%
    echo %StationIP%
    )

结果是:

ECHO is off.
ECHO is off.

该问题阻止我采用变量并使用更多循环。 需要你的帮助:))

2 个答案:

答案 0 :(得分:4)

MC ND是正确的。选择以下两种方式之一:

@ECHO OFF
set Computerslist=ipst.txt

for /f "tokens=1,2" %%A in (%Computerslist%) do (
    set "StationNumber=%%A" & echo.%%A
    set "StationIP=%%B" & echo.%%B
    )

@ECHO OFF
setlocal enabledelayedexpansion
set Computerslist=ipst.txt

for /f "tokens=1,2" %%A in (%Computerslist%) do (
    set StationNumber=%%A
    set StationIP=%%B
    echo.!StationNumber!
    echo.!StationIP!
    )

答案 1 :(得分:1)

@ECHO OFF
    setlocal enableextensions enabledelayedexpansion

    set "Computerslist=ipst.txt"

    for /f "tokens=1,2 usebackq" %%A in ("%Computerslist%") do (
        set "StationNumber=%%A"
        set "StationIP=%%B"
        echo !StationNumber!
        echo !StationIP!
    )

但是,如注释中所示,只有在更改变量的块中访问更改的变量时才需要延迟扩展。所以,这段代码

@ECHO OFF
    set "Computerslist=ipst.txt"

    for /f "tokens=1,2 usebackq" %%A in ("%Computerslist%") do (
        set "StationNumber=%%A"
        set "StationIP=%%B"
    )
    echo %StationNumber%
    echo %StationIP%

这里,对变量值的访问不会在更改位置的同一块中进行,因此不需要延迟扩展。

已编辑 - 如评论中所述,此最后一个代码未列出文件中的所有行。当for循环遍历它们时,先前的值被覆盖,变量只保存最后一个赋值,它将回显给控制台。我的错,选择了不好的样品。