A expansão normal %n1% ocorre quando a linha é analisada. Qualquer bloco de código entre parênteses, como sua cláusula DO (), é analisado de uma só vez. Portanto, o valor que você vê em cada iteração é o valor que existia antes da execução do loop.
A sugestão do wmz para usar o CALL funciona, mas como ele diz, é lento. Há um caminho melhor. Você pode usar a expansão atrasada para transferir o valor n1 para uma variável FOR e, em seguida, usar a variável FOR como seu índice "matriz".
Se você está recebendo um erro de sintaxe com seu comando REN, provavelmente é porque um nome de arquivo contém um espaço, então ele precisa ser colocado entre aspas.
for %%F in (*.txt) do (
for %%N in ("!n1!") do ren "%%F" "!array[%%N]!"
set /a n1+=1
)
Observe que ! é legal em nomes de arquivos. Qualquer nome de arquivo que contenha ! será corrompido quando "%%F" for expandido devido à expansão atrasada. A solução é ativar e desativar a expansão atrasada conforme necessário no loop.
setlocal disableDelayedExpansion
for %%F in (*.txt) do (
set "name=%%F"
setlocal enableDelayedExpansion
for %%N in ("!n1!") do ren "!name!" "!array[%%N]!"
endlocal
set /a n1+=1
)
endlocal