2013-03-14 71 views
1

我想要做的应该是批次退伍军人简单。我有环境变量列表:批:从其他变量设置一个变量

核心-1 CORE2 CORE3等

我试图将它们设置为一个名为HOSTS新的变量。每个变量应该由spaces.So分开的HOSTS =“核1 CORE2 CORE3”

for /L %%x in (1,1,20) do (
    IF "!CORE%x!"=="" (
     goto continue 
    ) 
    IF NOT "!CORE%x!"=="" ( 
     set HOSTS = "%HOSTS% !CORE%x!" 
    ) 
) 
:continue 

回答

1

如果我正确理解你的问题,你要几个变量CORE1的内容串联到CORE20 - 如果设置 - 成变量HOSTS,用空格分隔各个值。你可以做这样的(我已经添加了一些示例值,以使一个可运行的例子):

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
SET CORE1=1 
SET CORE3=3 
SET CORE4=4 
SET CORE6=6 
SET CORE8=8 
SET CORE12=12 
SET CORE17=17 

for /L %%x in (1,1,20) do (
    IF "!HOSTS!"=="" ( 
     :: avoid leading space on first value 
     SET HOSTS=!CORE%%x! 
    ) ELSE (
     IF NOT "!CORE%%x!"=="" ( 
      SET HOSTS=!HOSTS! !CORE%%x! 
     ) 
    ) 
) 

ECHO %HOSTS% 

该脚本将输出:

1 3 4 6 8 12 17 
+0

感谢的字母顺序瓦尔CORE *的所有值!这完美的作品! – 2013-03-14 19:31:01

1

这对你的工作?

setlocal enabledelayedexpansion 
set inc=0 
:heck 
set /a "inc+=1" 
if defined CORE%inc% (
    set "HOSTS=%HOSTS% !CORE%inc%! 
    goto heck 
) 
rem remove leading space from %HOSTS% 
set HOSTS=%HOSTS:~1% 

这是一个更完整的测试脚本。

@echo off 
setlocal enabledelayedexpansion 

set CORE1=foo 
set CORE2=bar 
set CORE3=baz 
set CORE4=qux 
set CORE5=quux 
set CORE6=corge 
set CORE7=grault 
set CORE8=garply 
set CORE9=waldo 
set CORE10=fred 
set CORE11=plugh 
set CORE12=xyzzy 
set CORE13=thud 

set inc=0 
:heck 
set /a "inc+=1" 
if defined CORE%inc% (
    set "HOSTS=%HOSTS% !CORE%inc%! 
    goto heck 
) 
rem remove leading space from %HOSTS% 
set HOSTS=%HOSTS:~1% 

echo %HOSTS% 

输出示例:

C:\Users\me\Desktop>test 
foo bar baz qux quux corge grault garply waldo fred plugh xyzzy thud 
0
@ECHO OFF 
SETLOCAL 
:: set 'COREn' to a value for testing 
FOR /l %%i IN (1,1,10) DO SET core%%i=str%%i 
:: 
(SET hosts=) 
FOR /f "tokens=2delims==" %%i IN ('set core') DO CALL :addval %%i 
ECHO hosts=%hosts% 
GOTO :eof 

:addval 
IF DEFINED hosts (SET hosts=%hosts% %1) ELSE (SET hosts=%1) 
GOTO :EOF 

你关心元件的精确序列?这将积聚在ENVVAR名

0
set HOSTS=%CORE1% 
for /L %%x in (2,1,20) do (
    if defined CORE%%x (
     set "HOSTS=!HOSTS! !CORE%%x!" 
    ) 
) 

安东尼