Как считать массивы в циклах FOR, используя переменную в качестве индекса? - PullRequest
0 голосов
/ 05 мая 2018

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

Пакет Windows не может редактировать переменные, которые будут расширены, если они находятся внутри цикла FOR.

Ex:

set /a x=1
Powershell Get-Clipboard> %temp%\ffmpeglist.txt
setlocal enableExtensions enableDelayedExpansion
for /F "delims=| tokens=*" %%A in (%temp%\ffmpeglist.txt) do (
    set input[!x!]=%%A
    call echo !input[%x%]!
    set /a x += 1
)
endlocal

Ожидаемое поведение:

g:\videos\youtube1.mp4
g:\videos\youtube2.mp4
g:\videos\youtube3.mp4
g:\videos\youtube4.mp4
g:\videos\youtube5.mp4

Что я получаю:

g:\videos\youtube1.mp4
g:\videos\youtube1.mp4
g:\videos\youtube1.mp4
g:\videos\youtube1.mp4
g:\videos\youtube1.mp4

Независимо от того, что я делаю, set /a x+= 1 не изменит значение x.

Есть ли решения? Я открыт для всего.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Благодаря @Aacini и @LotPings я пришел к ответу:

set /a x=1
Powershell Get-Clipboard> %temp%\ffmpeglist.txt
setlocal enableDelayedExpansion
for /f "delims=|" %%A in (%temp%\ffmpeglist.txt) do (
    set input[!x!]="%%A"
    for %%i in (!x!) do echo !input[%%i]!
    set /a x =+ 1
)

Проблема не в том, что BATCH не может

редактировать переменные, которые будут расширены, если они находятся внутри цикла FOR.

Но то, что он делает это не очень прямым путем.

0 голосов
/ 05 мая 2018

EDIT

В вашей сильно измененной партии (фактически новый вопрос) изменение

 call echo !input[%x%]!

до

 call echo %%input[!x!]%%

Если в (кодовом блоке) вам может понадобиться отложенное расширение для принудительного ввода фактических значений, если в то же время, используя индексированную переменную, вам нужен еще один уровень отложенного раскрытия, который вы можете выполнить с помощью псевдо-вызова и удвоенных знаков процента

Call set Input=%%input[!x!]%%
mediainfo --Output=Video;%%Height%% !input! > %temp%\ffmpegres%x%.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...