我正在尝试从“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.
该问题阻止我采用变量并使用更多循环。 需要你的帮助:))
答案 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循环遍历它们时,先前的值被覆盖,变量只保存最后一个赋值,它将回显给控制台。我的错,选择了不好的样品。