Как объединить повторяющиеся строки в пакетном скрипте

2890
Jim Fell

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

set REPO_ROOT="%~1" set "UPPATH=.\" set "UPDIR=..\" for /l %%i in (1,1,%REPO_ROOT%) do set "UPPATH=%UPPATH%%UPDIR%" echo %UPPATH% 

Моя проблема в том, что если я жестко кодирую set "UPPATH=%UPPATH%%UPDIR%"любое количество раз, он работает нормально, но, похоже, не хочет работать в цикле. Будем благодарны за любые мысли или предложения о том, как заставить этот цикл работать с переданным параметром. Благодарю.

1

1 ответ на вопрос

2
DavidPostill

Он работает нормально, но, похоже, не хочет работать в цикле.

Вам нужно установить EnableDelayedExpansion.


EnableDelayedExpansion

Задержка расширения приведет к тому, что переменные будут расширяться во время выполнения, а не во время разбора, эта опция включается с помощью SETLOCALкоманды. Когда действует отложенное расширение, на переменные можно ссылаться, используя! Variable_name! (в дополнение к обычному% variable_name%)

пример

Setlocal EnableDelayedExpansion

Source EnableDelayedExpansion

Смотрите ответ на Джо для более подробного объяснения того, почему это необходимо.


Дальнейшее чтение