Пакетен файл за създаване на множество променливи от единични редове в текстов файл

Имам текстов файл с имената на имената на компютрите и съответния статичен 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
)

person Tester123    schedule 26.06.2013    source източник


Отговори (3)


Това трябва да работи:

@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
person David Ruhmann    schedule 26.06.2013

Ето едно решение, което избягва необходимостта от забавено разширяване. Той използва 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"
)
person dbenham    schedule 26.06.2013

За да използвате набора от променливи в друг пакетен файл, ред по ред, просто анализирайте редовете, както е направено в други отговори тук, и извикайте другия пакетен файл с метапроменливите.

@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"
)
person foxidrive    schedule 27.06.2013
comment
Благодаря и за помощта. Сигурен съм, че това ще ми бъде полезно, когато имам нужда. - person Tester123; 27.06.2013