我试图制作一个批处理文件,通过包含这样的数字的数组循环: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
)
答案 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 /F
中if
循环中的for /F
块是为了防止第二个令牌号不总是大于第一个令牌号。但如果可以保证,:SUB
循环只需要包含for /F
和set "nr1=%%a"
。