【问题标题】:Can't Set Variable with"FOR" command无法使用“FOR”命令设置变量
【发布时间】:2014-02-27 08:59:59
【问题描述】:

我正在尝试从“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.

这个问题使我无法获取变量并将它们与更多循环一起使用。 需要你的帮助:)

【问题讨论】:

  • 您是否引用了“不良”行为,因为输出不正确?这可能是因为第 1 行 (@ECHO OFF)?
  • 你的问题是变量扩展。需要延迟扩展。请参阅here。使用setlocal enabledelayedexpansion 并在需要时将%var% 替换为!var!
  • MC ND - 你能在这里编辑我的批次吗?
  • @Ohad_E,请查看答案(并阅读评论中的链接以获取更多信息)。
  • MC ND - 太棒了!我仍在尝试了解有关“设置本地”的更多信息!很有帮助,谢谢!

标签: batch-file


【解决方案1】:

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

@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!
    )

【讨论】:

  • 为了完整性,第三种方式call echo(%%StationID%%
【解决方案2】:
@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!
    )

但是,正如 cmets 中所指出的,仅当在更改变量的块内访问更改的变量时才需要延迟扩展。所以,这段代码

@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%

在这里,对变量值的访问不是在它发生变化的同一块中完成的,因此不需要延迟扩展。

已编辑 - 如 cmets 中所述,最后一段代码并未列出文件中的所有行。当 for 循环遍历它们时,先前的值将被覆盖,并且变量仅保存最后分配的值,该值将回显到控制台。我的错,选择了错误的样本。

【讨论】:

  • 当然,在第二个示例中,您只会显示 Computerslist 中最后一项的结果...如果只有一项,这很好。 OP 将不得不做出决定。
  • @RGuggisberg,你是对的。我的错没有更好地解释它。打算换个答案。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 2010-12-25
  • 2016-10-29
  • 1970-01-01
  • 2018-02-25
  • 2012-11-19
相关资源
最近更新 更多