2013-10-07 2 views
0

Я знаю, что Batch - это плохой язык сценариев, и вы не можете ожидать от него многого, но я думаю, что это можно сделать, но я не знаю, есть ли более простые способы. Я хочу перебрать два списка элементов (одинаковое число), связанных между собой аналогично ассоциативному массиву. Я хочу сохранить ссылку на позицию элемента в первом списке и получить элемент из второго списка. Может быть, этот код будет лучше объяснить:Списки сопоставления и сканирования в пакете

SET Projects=(Project1 Project2 Project3) 
SET Files=(Project1.txt Project2.txt Project3.txt) 

for %%i in %Projects% do (
    :: Get the corresponding value in Files like SET ProjectFile=Projects[%%i] 
) 

Для Project1 Я хочу получить Project1.txt для Project2 Я хочу Project2.txt и так далее. Есть ли какой-либо трюк или даже более сложный способ достичь этого?

ответ

0

Здесь вы можете использовать псевдо-массивы.

Сначала файлы назначаются файлу псевдо-массива [0] .. file [2].
Затем для каждого номера проекта выбирается соответствующий файл.

@ECHO OFF 
setlocal EnableDelayedExpansion 
SET Projects=Project1 Project2 Project3 
SET Files=Project1.txt Project2.txt Project3.txt 

set /a file_n=0 
for %%f in (%files%) do (
    set /a file_n+=1 
    set "files[!file_n!]=%%f" 
) 

set proj=0 
for %%p in (%Projects%) do (
    set /a proj+=1 
    call set file=%%files[!proj!]%% 
    echo !file! 
) 
+0

Теперь у меня есть только, чтобы узнать, как получить конкретное значение (например, файл, соответствующий Project2) – ali

+1

Это вопрос о правилах. Я полагаю, что ваше правило для каждого проекта одного файла, а порядок в обоих списках один и тот же. Но, возможно, лучше определить для каждого проекта собственный список файлов, например 'set file_project1 = file1.c file2.c ...' – jeb

+0

Спасибо, я полагаю, это намного лучше – ali

Смежные вопросы