变量作为for循环中的标记

时间:2016-08-16 19:20:29

标签: arrays variables batch-file token

我试图制作一个批处理文件,通过包含这样的数字的数组循环:1 2 3 4 5。 在循环的第一次尝试中,我喜欢选择令牌1和2.在第二个2和3中,在第三个3和4中等等。

我认为我应该使用!在我用作令牌的第一和第二变量中。就像在第一个FOR / F中一样,但是当我这样做时,我得到:!首先!"在这里没有预料到。

如果我使用%,它就不会计算在内。 除变量标记外,一切都有效。谁知道怎么样?任何帮助或建议都非常有用。 这是我喜欢的部分:

setlocal EnableDelayedExpansion
set first=1
set second=2
set N=4
set output="1 2 3 4 5"
set output=%output:"=%

for /L %%a in (1,1,%N%) do (
    if !counter! equ active (
        set /a first+=1
        set /a second+=1
    )
        FOR /F "tokens=!first!" %%a IN ("%output%") DO (
        set nr1=%%a
        )
        FOR /F "tokens=%second%" %%a IN ("%output%") DO (
        set nr2=%%a
        )

    echo nr1 var: !nr1!
    echo nr2 var: !nr2!
    echo counter f: !first!
    echo counter s: !second!
    set counter=active
)

1 个答案:

答案 0 :(得分:2)

您不能在.readAsArrayBuffer(/* Blob or File object */)的选项字符串中使用延迟扩展变量。你也不能使用其他for /F变量。但您可以使用正常(立即)扩展变量。您也可以使用参数引用,例如for

因此,解决问题的方法是将%1循环放在子例程中,并在主程序中使用for /F,并将延迟扩展变量作为参数,如下所示: / p>

call

由于您是从同一个字符串中提取标记,因此我将两个@echo off setlocal EnableDelayedExpansion set /A first=1 set /A second=2 set /A N=4 set "output=1 2 3 4 5" set "counter=" for /L %%a in (1,1,%N%) do ( if defined counter ( set /A first+=1 set /A second+=1 ) call :SUB !first! !second! echo nr1 var: !nr1! echo nr2 var: !nr2! echo counter f: !first! echo counter s: !second! set "counter=active" ) endlocal exit /B :SUB val_token1 val_token2 for /F "tokens=%~1,%~2" %%a in ("%output%") do ( if %~1 LSS %~2 ( set "nr1=%%a" set "nr2=%%b" ) else if %~1 GTR %~2 ( set "nr1=%%b" set "nr2=%%a" ) else ( set "nr1=%%a" set "nr2=%%a" ) ) exit /B 循环合并为一个循环。子例程for /Fif循环中的for /F块是为了防止第二个令牌号不总是大于第一个令牌号。但如果可以保证,:SUB循环只需要包含for /Fset "nr1=%%a"