У вас есть пара мест, где вы использовали активное расширение (с %
разделителями), где вы должны были использовать отложенное расширение (с !
разделителями). Исправление, которое, кажется, получает поведение, которое вы хотите:
@echo on set LOGFILE=batch.log call :LOG > %LOGFILE% exit /B :LOG setlocal EnableDelayedExpansion set n=0 set count=0 set vector[%n%]=0 for /f "tokens=* delims=." %%i in ('dir /b /a-d "C:\Test"') do ( set filename=%%i for /f "tokens=2 delims=_." %%a in ("!filename!") do ( set vector[!n!]=%%a for /f "tokens=* delims==" %%v in ('set vector[!n!]') do @echo %%v ) set /A n+=1 )
Чтобы быть ясным, изменения, которые я сделал, должны:
for /f "tokens=2 delims=_." %%a in ("%filename%") do (
изменился на:
for /f "tokens=2 delims=_." %%a in ("!filename!") do (
а также:
for /f "tokens=* delims==" %%v in ('set vector[%n%]') do @echo %%v
изменился на:
for /f "tokens=* delims==" %%v in ('set vector[!n!]') do @echo %%v
Без этих изменений %filename%
всегда расширяется до пустой строки и %n%
всегда расширяется до 0 (значение, которое было установлено при начале внешнего for
); в последнем случае это только испортило ваш вывод (вы правильно использовали !n!
при назначении vector
, поэтому он имел правильные значения, просто вы печатали только первую запись, даже если вы добавили записи в последующие индексы).