1

私がやろうとしていることは、バッチのベテランにとって単純なはずです。環境変数のリストがあります:

CORE1 CORE2 CORE3など

それらを HOSTS という新しい変数に設定しようとしています。各変数はスペースで区切る必要があります。そのため、HOSTS = "CORE1 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
4

4 に答える 4

1

私があなたの質問を正しく理解していれば、いくつかの変数の内容CORE1CORE20- 設定されている場合は - variable に連結し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
于 2013-03-14T15:59:30.773 に答える
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
于 2013-03-14T16:00:31.173 に答える
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 

要素の正確な順序が気になりますか? これにより、vars CORE* のすべての値が envvar 名のアルファベット順に累積されます。

于 2013-03-14T16:04:53.920 に答える
0
set HOSTS=%CORE1%
for /L %%x in (2,1,20) do (
   if defined CORE%%x (
      set "HOSTS=!HOSTS! !CORE%%x!"
   )
)

アントニオ

于 2013-03-14T18:44:48.073 に答える