2013-02-28 5 views
2

Почему эта строка не конкатенируется?Batch file string concatenation

@echo off 
set NUM_NODES=4 
set ENSEMBLE=127.0.0.1:2181 

for /l %%x in (2, 1, %NUM_NODES%) do (
    echo %%x 
    set ENSEMBLE=%ENSEMBLE%,127.0.0.1:2%%x81 
) 
echo ensemble: %ENSEMBLES% 

ВЫВОД:

2 
3 
4 
ensemble: 127.0.0.1:2181,127.0.0.1:2481 

ответ

4

Поскольку в пакетных файлах переменных подставляются при команда разобран, а не непосредственно перед ее выполнением. Если вы хотите, последнее поведение, вам нужно использовать замедленное расширение:

setlocal enabledelayedexpansion 
@echo off 
set NUM_NODES=4 
set ENSEMBLE=127.0.0.1:2181 

for /l %%x in (2, 1, %NUM_NODES%) do (
    echo %%x 
    set ENSEMBLE=!ENSEMBLE!,127.0.0.1:2%%x81 
) 
echo ensemble: %ENSEMBLES% 

help set содержит пространное описание и именно ваш пример.

+0

удивительные работы! Просто вытащил меня из мертвого бульвара – Stainedart

0

И исходный пример, и ответ содержат одну и ту же опечатку, добавляя S к концу переменной в инструкции ECHO, поэтому ни один пример, как он появляется, не производит никакого вывода из этой переменной.