Я пытаюсь перебрать значения, используя цикл for но я не получаю ожидаемых результатов. Основываясь на фактическом выводе, я думаю, что вложенный цикл здесь не требуется, но я не уверен, как мне достичь ожидаемого вывода без циклов.
@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
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
Вы, похоже, неправильно понимаете концепцию вложенных (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...
Похожие вопросы
Новые вопросы
windows
Написание программного обеспечения, специфичного для операционной системы Microsoft Windows: API, поведения и т. д. ОБЩАЯ ПОДДЕРЖКА WINDOWS НЕ ПО ТЕМЕ. Вопросы поддержки можно задать на https://superuser.com