批处理文件,用于从文本文件中的单行创建多个变量

时间:2013-06-26 19:51:02

标签: batch-file command dos netsh

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

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
)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"
)

答案 2 :(得分:2)

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

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