Brian
Brian

Reputation: 319

Windows Batch:Nested for loop counter not working

I'm a novice at batch and been trying to get this to work properly but can't figure out what I'm doing wrong. The counter doesn't increment for some reason?

@echo off
set local enabledelayedexpansion

set /a counter=0
for /F "delims=" %%a in ('dir /b/ad/o "C:\Sources"') do (
for /F "delims=" %%i in ('dir /b/ad/o "C:\Sources\%%a"') do (
set a[%counter]=%%i
set /a counter=counter+1
echo value of counter is: %counter%
)
)
echo array 0 is: %a[0]%
echo array 1 is: %a[1]%

Upvotes: 0

Views: 940

Answers (1)

Matthew Whited
Matthew Whited

Reputation: 22443

The SET LOCAL should really be SETLOCAL. It's a single command. Also the nested variables should be refernced with !var! and not %var%. If you use %var% it will use the outer scope (and not work correctly).

https://ss64.com/nt/delayedexpansion.html

@ECHO OFF

REM "SETLOCAL" not "SET LOCAL"
SETLOCAL enabledelayedexpansion

SET counter=0
FOR /L %%a IN (1,1,10) DO (
    FOR /L %%i IN (1,1,10) DO (    
        REM USE "!" instead of "%"
        SET  X[!counter!]=%%i
        SET /a counter=!counter! +1
        echo value of counter is: !counter!
    )
)
ECHO array 0 is: %X[0]%
ECHO array 1 is: %X[1]%

BTW, if you want to have your variables just scoped to your batchfile you should end your script with ENDLOCAL

Upvotes: 1

Related Questions