2013-02-28 215 views
2

爲什麼這個字符串不連接?批處理文件字符串串聯

@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% 

OUTPUT:

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

真棒作品!剛剛讓我從deadend林蔭大道謝謝了 – Stainedart 2013-02-28 14:16:12

0

原始示例和答案都包含相同的打字錯誤,並將E添加到ECHO語句中變量的末尾,因此,無論哪種示例都會生成變量的輸出。