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