Нормальное расширение %n1%
происходит при разборе строки. Любой заключенный в скобки блок кода, такой как ваше предложение DO(), анализируется одновременно. Таким образом, значение, которое вы видите на каждой итерации, является значением, существовавшим до запуска цикла.
Предложение wmz использовать CALL работает, но, по его словам, оно медленное. Существует лучший способ. Вы можете использовать отложенное расширение, чтобы передать значение n1
в переменную FOR, а затем использовать переменную FOR в качестве индекса "массива".
Если вы получаете синтаксическую ошибку с помощью команды REN, возможно, это связано с тем, что имя файла содержит пробел, поэтому его необходимо заключить в кавычки.
for %%F in (*.txt) do (
for %%N in ("!n1!") do ren "%%F" "!array[%%N]!"
set /a n1+=1
)
Обратите внимание, что !
законно в именах файлов. Любое имя файла, которое содержит !
будет поврежден при раскрытии "%%F"
из-за отложенного расширения. Решение состоит в том, чтобы включать и выключать отложенное расширение по мере необходимости в цикле.
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