Пакетный файл для создания нескольких переменных из одной строки в текстовом файле

У меня есть текстовый файл с именами имен компьютеров и соответствующими статическими 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