Как сделать цикл пакетного файла, который сохраняет содержимое массива в файл - PullRequest
0 голосов
/ 07 июля 2019

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

Это код, который я пытался использовать для него:

setlocal EnableDelayedExpansion
set i=0
:saveloop
if not defined !array%i%! goto endsaveloop
echo !array%i%! >> examplefile.txt
set/a i+=1
goto saveloop
:endsaveloop

Итак, я ожидаю, что он создаст файл с именем examplefile.txt, состоящий из содержимого массива !array%i%!, например, если содержимое массива было exampledata1 и exampledata2, файл должен содержать

exampledata1
exampledata2

но во время выполнения он просто прыгает в первый раз через цикл в if not defined !array%i%! goto endsaveloop хотя !array%i%! определенно определен в этой точке.

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Вы можете найти

set array>examplefile

или

for /f "tokens=1*delims==" %%a in ('set array 2^>nul') >>examplefile

полезными.

set array отображает текущий (т.е. время выполнения)значения всех имен переменных, которые начинаются array.

Формат первого должен быть

array1=37
array10=61
array11=89
array2=55
...

, чтобы вы могли легко перезагрузить массив точно так же, как это было с

for /f "delims=" %%a in ('type examplefile') do set "%%a"

Второй должен просто дать

37
61
89
55

Обратите внимание, что это в строгом алфавитном порядке имен переменных.

Что касается вашей проблемы, вам нужно if not defined array%i% as !array%i%! - это содержимое переменной, тогда как без ! это сама переменная.Например, вы бы выполнили if (not) defined 4, если бы содержимое переменной array%i% было 4.

0 голосов
/ 07 июля 2019

Обычно я использую Set, чтобы перебирать массивы, пока я дополняю нулями, если последовательность важна

...