Пакетный скрипт в DOS, попутный обход нескольких списков - PullRequest
1 голос
/ 07 ноября 2011

У меня есть два списка, альфа и бета, с n элементами в каждом. Это две переменные, определенные в самом пакетном файле.

Я хочу цикл, который повторяется по обоим спискам попарно.

Итак, у меня был бы доступ к

alpha1 and beta1

then 

alpha2 and beta2

etc...

Мы перебрали один список (альфа), но нет очевидного индекса, который можно было бы использовать для индексации в бета-версии.

Нам нужно, чтобы это был пакетный сценарий DOS, а не powershell.

1 Ответ

3 голосов
/ 08 ноября 2011

Я полагаю, что ваши списки являются пакетными переменными с разделенными пробелами элементами, такими как:

set alpha=alpha1 alpha2 alpha3 alpha... alphaN
set beta=beta1 beta2 beta3 beta... betaN

Если это так, то вы можете обрабатывать их так, как хотите:

set i=1
:loop
for /F "tokens=%i%" %%a in ("%alpha%") do set alphaElem=%%a
for /F "tokens=%i%" %%b in ("%beta%") do set betaElem=%%b
if "%alphaElem%" == "" goto endLists
echo Pair %i%- %alphaElem% and %betaElem%
set /A i+=1
goto loop
:endLists

Другой и более быстрый подход заключается в том, чтобы сначала преобразовать списки в массивы, а затем напрямую манипулировать элементами массива:

setlocal EnableDelayedExpansion
set i=0
for %%a in (%alpha%) do set /A i+=1 & set alpha[!i!]=%%a
set i=0
for %%b in (%beta%) do set /A i+=1 & set beta[!i!]=%%b
set n=%i%
. . .
for /L %%i in (1,1,%n%) do echo Pair %%i- !alpha[%%i]! and !beta[%%i]!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...