我有一个文本文件,其中包含计算机名称和相应的静态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
)
这应该可以工作:
@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
这里有一个避免延迟扩展的解决方案。它使用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"
)
要逐行使用另一个批处理文件中的变量集,只需像这里的其他答案中那样解析行,然后用元变量调用另一个批次文件。
@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"
)