Batch file Can';t用“设置变量”;至于;命令

Batch file Can';t用“设置变量”;至于;命令,batch-file,Batch File,我试图从“for/f”命令中设置两个变量,并在回显时始终获取“ECHO is off”: 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

我试图从“for/f”命令中设置两个变量,并在回显时始终获取“ECHO is off”:

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.
这个问题使我无法接受变量并将其用于更多循环。 需要您的帮助:)

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

@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循环覆盖它们时,先前的值被覆盖,变量只保存最后一个指定的值,该值将回显到控制台。我的错误,选择的样本不正确。

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
    )


由于输出不正确,您是否引用了“坏”行为?这可能是因为第1行(
@ECHO OFF
)?您的问题是变量扩展。需要延迟扩展。请看。使用
setlocal enabledelayedexpansion
并将
%var%
替换为
!瓦尔
where needed.MC ND-你能在这里编辑我的批次吗?@Ohad_E,请查看答案(并阅读评论中的链接了解更多信息)。MC ND-太棒了!我还在努力学习更多关于“设置本地”的知识!那很有帮助,谢谢你!为了完整性,第三种方法
调用echo(%%StationID%%
当然,在第二个示例中,您只会在Computerslist中显示最后一项的结果……如果只有一项就可以了。OP将不得不删除。@RGuggisberg,您是对的。我的错误是没有更好地解释它。要更改答案吗?谢谢
@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!
    )