Как добавить вкладки в строку в пакете - PullRequest
0 голосов
/ 31 марта 2012

У меня есть этот код, где я хочу проверить «подсчет».Подсчет не работает.

Код:

set "Myvar=Hello"
set #=%MyVar%
set strlen=0
:loop
if defined # (set #=%#:~1%&set /A strlen += 1&goto loop)

echo LEN: %strlen%
SET /A tabscount=(40-%strlen%)/8
echo Tabs count: %tabscount%
echo counting...
FOR /L %%G IN (0,1,%%tabscount) DO echo %%G
pause

И вторая проблема заключается в том, что я хотел бы добавлять вкладки в конец строки Myvar столько раз, сколько значение tabscount.

Как сделать добавление в блоке DO?Должно ли что-то подобное работать?SET "tabs =%%" Или, вернее, SET "Myvar. ="?

Отредактировано: я восстановил %% tabscount

1 Ответ

2 голосов
/ 31 марта 2012

В вашем цикле подсчета 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...