Seu código postado não pode funcionar porque %HOSTNAMETOUSE%
é expandido quando a instrução é analisada e todo o bloco entre parênteses é analisado em uma passagem, antes que o loop seja executado. Portanto, o valor expandido é constante para todas as iterações.
Você deve usar a expansão atrasada para obter o valor no momento da execução.
@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
set HOSTNAMETOUSE=prefix-%%N
ECHO !HOSTNAMETOUSE!
)
Agora, prefixar com 0, conforme necessário.
Como você nunca precisa de mais do que um único 0, você pode usar uma instrução IF.
@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
if %%N lss 10 (set HOSTNAMETOUSE=prefix-0%%N) else set HOSTNAMETOUSE=prefix-%%N
ECHO !HOSTNAMETOUSE!
)
Mas isso não é conveniente se a largura do seu número for maior que 2 dígitos. Uma solução mais geral é adicionar uma sequência de zeros n com o comprimento desejado e, em seguida, usar uma operação de substring para manter os dígitos n mais à direita.
@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
set "n=00%%N"
set "HOSTNAMETOUSE=!n:~-2!
ECHO !HOSTNAMETOUSE!
)
Você pode facilmente estender essa solução para praticamente qualquer número de zeros iniciais.