В вашем цикле подсчета FOR / L отсутствуют проценты вокруг переменной tabscount
FOR /L %%G IN (0,1,tabscount) DO echo %%G
Добавление вкладок ничем не отличается от добавления любой другой строки. Вкладки трудно отличить от пробелов, просто посмотрев на код. Я рекомендую определить переменную TAB, так что вам нужно беспокоиться только о литерале табуляции в одном месте.
Если бы вы просто делали одно добавление, то вы могли бы просто использовать
set "TAB= "
set "MyVar=%MyVar%%TAB%"
Но вы хотите использовать цикл для добавления нескольких вкладок, и% MyVar% будет раскрываться только один раз в цикле. Поэтому вам нужно что-то сделать, чтобы получить доступ к текущему значению в цикле. У вас есть несколько вариантов:
1) Используйте CALL SET, чтобы получить дополнительный анализ для каждой итерации: (относительно медленно и потенциально небезопасно)
for /l %%G in (0 1 %tabscount%) do call set "MyVar=%%MyVar%%%TAB%"
2) Используйте цикл GOTO вместо FOR / L. Оператор IF будет повторяться при каждой итерации, поэтому он будет работать. (относительно медленно, но немного безопаснее, чем вариант 1)
:appendLoop
if %tabscount% gtr 0 (
set "MyVar=%MyVar%%TAB%"
set /a tabscount-=1
goto :appendLoop
)
3) Используйте отложенное расширение, чтобы получить значение во время выполнения вместо времени анализа. (намного быстрее и всегда безопаснее)
setlocal enableDelayedExpansion
for /l %%G in (0 1 %tabscount%) do set "MyVar=!Myvar!%TAB%"
Существуют и другие варианты.
Обратите внимание, что SET / A - это единственная ситуация, когда вам не нужны проценты вокруг числовых переменных. Нет ничего плохого в том, что у вас есть, но вы также можете написать инструкцию SET / A как
set /a tabscount=(40-strlen)/8