Как мне объединить одну строку stati c и имя переменной, чтобы создать одно имя переменной, которое определено? - PullRequest
0 голосов
/ 05 мая 2020

В моем пакетном файле у меня есть несколько строк:

set "line1=bla"
set "line2=what"

Я хочу знать, как поместить переменную в конец строки stati c, чтобы она соответствовала определенному имени переменной. Итак, canum - это номер строки. Переменная %line1% существует, но для l oop приведенного выше кода, чтобы я мог записать в файл столько строк, сколько хотел, у меня был бы номер строки как переменная, которая увеличивается каждый раз, когда она зацикливается, затем проверяет, существует ли переменная в сочетании с line. Это трудно объяснить.

В общем, я бы начал с некоторых переменных, которые сильно различаются по определению или нет. line1 можно было определить, но не удалось. Я хотел бы иметь одну переменную, которая представляет собой число, которое увеличивается на единицу каждый раз, когда пакетный файл зацикливается, который действует как 1 в line1 или 2 в line2. Это число увеличивается каждый раз, когда пакетный файл зацикливается. Во-первых, пакетный файл проверяет, определена ли n-я строка, и, если да, выводит ее в файл как дополнительную строку с помощью echo %lineNUM%>>file.txt (где NUM является n-м числом). Однако я не знаю, как объединить одну строку stati c (которая в моем случае это test и переменную (которая в моем случае - %canum%), чтобы создать одно имя переменной, которое определено.

:writeloop_setuplogical
set /a canum = %canum% + 1
if NOT defined !line%canum%! :done
echo !line%canum%!>>file.txt

Это мой лучший вариант того, что я только что пытался объяснить. У меня болит мозг.

1 Ответ

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

Пара моментов: откажитесь от ссылки на себя в наборе / A, все, что вам нужно, это Set /A canum+=1. Для доступа к массивам в пакетном режиме требуется, чтобы индексная переменная была расширена с отложенным расширением в блоках кода (круглые скобки). Для этого используются циклы For / L, так как 'объединенная' переменная может быть расширена с помощью переменной цикла for - !expansion [%%i]!

Чтобы предотвратить ошибочный вывод, синтаксис перенаправления действительно должен быть:

>>File.txt Echo !Line%Canum%!

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

If Not "!Line%Canum%!" == "" >>File.txt Echo !Line%Canum%!

Для выполнения в блоке кода:

  • Текущее значение

    For %%i in (!Canum!) Do If Not "!Line%%i!" == "" >>File.txt Echo !Line%%i!

  • Все значения

    For /L %%i in (1,1,!Canum!) Do If Not "!Line%%i!" == "" >>File.txt Echo !Line%%i!

...