Я пытаюсь перебрать значения, используя но я не получаю ожидаемых результатов. Основываясь на фактическом выводе, я думаю, что вложенный цикл здесь не требуется, но я не уверен, как мне достичь ожидаемого вывода без циклов.

@Echo Off
SETLOCAL ENABLEDELAYEDEXPANSION
Set "Ids=1,2"
Set "basePath=C:\Users\Documents\ReusableQueries\"
Set "fileName=test1,test2"
Set "extension=.csv"
echo ****Configuation Details****
Echo basePath - %basePath%
Echo fileName - %fileName%
Echo extension - %extension%
echo.
For %%i in (%Ids%) do (
    For %%f in (%fileName%) do (
        echo Id - %%i and file name - %%f
        Set "completepath=%basePath%%%f%extension%"
        echo completepath - !completepath!
        FOR /F "tokens=*" %%a IN (!completepath!) do (
            echo Result of api command1 call for Id : %%i and fileName: %%f
            echo.
        )
    )
)
Pause

Текущий выход:

****Configuation Details****
basePath - C:\Users\Documents\ReusableQueries\
fileName - test1,test2
extension - .csv

Id - 1 and file name - test1
completepath - C:\Users\Documents\ReusableQueries\test1.csv
Result of api command1 call for Id : 1 and fileName: test1

Id - 1 and file name - test2
completepath - C:\Users\Documents\ReusableQueries\test2.csv
Result of api command1 call for Id : 1 and fileName: test2

Id - 2 and file name - test1
completepath - C:\Users\Documents\ReusableQueries\test1.csv
Result of api command1 call for Id : 2 and fileName: test1

Id - 2 and file name - test2
completepath - C:\Users\Documents\ReusableQueries\test2.csv
Result of api command1 call for Id : 2 and fileName: test2

Ожидаемый результат:

****Configuation Details****
basePath - C:\Users\Documents\ReusableQueries\
fileName - test1,test2
extension - .csv

Id - 1 and file name - test1
completepath - C:\Users\Documents\ReusableQueries\test1.csv
Result of api command1 call for Id : 1 and fileName: test1

Id - 2 and file name - test2
completepath - C:\Users\Documents\ReusableQueries\test2.csv
Result of api command1 call for Id : 2 and fileName: test2
0
Vikas J 19 Авг 2019 в 09:08

2 ответа

Лучший ответ

Поскольку вы используете числовые и последовательные Id символы, ответ aschipfl лучше всего подходит для ваших нужд.

Вот более общий подход, чтобы дать вам представление о том, что можно сделать, если Id не являются числовыми или случайными.

set NameIdPairs="test1,1", "test2,2", "Filename with spaces,0xfca"
set "basePath=C:\Users\Documents\ReusableQueries\"
set "extension=.csv"

for %%P in (%NameIdPairs%) do (
    echo Current Pair: %%P
    for /F "tokens=1,2 delims=," %%F in (%%P) do (
        echo Id - %%G and file name - %%F
        set "completepath=%basePath%%%F%extension%"
        echo completepath - !completepath!
    )
)

Каждая пара filename и id сгруппированы в формате "filename,id"
Вокруг запятой (,) не должно быть пробелов, разделяющих их, иначе они станут частью filename и или id

Сами пары отделяются друг от друга запятой (,) и / или пробелами.

Внешний цикл выбирает одну пару на каждой итерации, затем внутренний цикл маркирует пару для извлечения filename и id

1
sst 19 Авг 2019 в 11:50

Вы, похоже, неправильно понимаете концепцию вложенных (for) циклов: они не циклы параллельно, а внутренний цикл выполняется в каждой итерации внешнего.

Таким образом, чтобы получить то, что вы хотите, учитывая, что Id всегда числовой и последовательный, удалите цикл for %%i, выполните set /A "Id=0" перед циклом for %%f, выполните set /A "Id+=1" в качестве первой команды в теле цикла и используйте !Id! вместо %%i, например так:

rem // Your code before the loop structure, except `set "Ids=1,2"`...
echo/
set /A "Id=0"
for %%f in (%fileName%) do (
    set /A "Id+=1"
    echo Id - !Id! and file name - %%f
    set "completepath=%basePath%%%f%extension%"
    echo completepath - !completepath!
    for /F "usebackq tokens=*" %%a in ("!completepath!") do (
        echo Result of api command1 call for Id : !Id! and fileName: %%f
        echo/
    )
)
rem // Your code after the loop structure...
2
aschipfl 19 Авг 2019 в 10:35