1

我有一个文本文件,其中包含以下格式的计算机名称和相应的静态 IP 地址。

COMPUTER NAME:PC ADDRESS=154.100.1.1 MASK=255.255.254.0 
COMPUTER NAME:PC2 ADDRESS=100.100.1.1 MASK=255.255.254.0 

我想从每一行获取值并将它们作为变量放在批处理文件中以供以后使用。这可能吗?总体目标是让这个易于编辑的文本文件中的值用于另一个批处理文件中的 netsh 命令。

我环顾四周,找到了获取文本文件行并使用下面的代码段将它们放在一个变量中的方法。但是,我不知道如何从一行创建多个变量。如果有人可以帮助我,我将不胜感激!

@echo o
setlocal enabledelayedexpansion
set Counter=1
for /f %%x in (D:\COMP_T.txt) do (
  set "comp!Counter!=%%x"
  set /a Counter+=1
)
4

3 回答 3

6

这应该有效:

@echo off
setlocal EnableDelayedExpansion
set "Count=1"
for /f "tokens=1,2,3,4,5,6,7 delims==: " %%A in (C:\File.txt) do (
    set "%%A[!Count!]=%%C"
    set "%%D[!Count!]=%%E"
    set "%%F[!Count!]=%%G"
    set /a "Count+=1"
)
:: Call other batch script here.
endlocal

示例输出:

COMPUTER[1]=PC
COMPUTER[2]=PC2
ADDRESS[1]=154.100.1.1
ADDRESS[2]=100.100.1.1
MASK[1]=255.255.254.0
MASK[2]=255.255.254.0
于 2013-06-26T20:11:57.817 回答
2

这是一个避免延迟扩展的解决方案。它使用 FINDSTR:在每一行的开头插入一个行号。保证搜索字符串"^"匹配文件中的每一行。

唯一的其他问题是设置 TOKENS 和 DELIMS 以正确解析行。

@echo off
setlocal
for /f "tokens=1,4,6,8 delims=:= " %%A in ('findstr /n "^" "d:\comp_t.txt"') do (
  set "comp%%A=%%B"
  set "addr%%A=%%C"
  set "mask%%A=%%D"
  set "counter=%%A"
)
于 2013-06-26T23:34:39.263 回答
2

要逐行使用另一个批处理文件中的变量集,只需像此处其他答案中所做的那样解析行,然后使用元变量调用另一个批处理文件。

@echo off
for /f "tokens=1,2,3,4,5,6,7 delims==: " %%a in ('type "File.txt" ') do (
    echo "computer_name=%%c"
    echo "address=%%e"
    echo "mask=%%g"
Call "batch script" "%%c" "%%e" "%%g"
)
于 2013-06-27T02:13:37.603 回答