Acho que você tornou o script muito complicado. Tente isto:
for /L %%C in (1,1,31) do (
for /r %1 %%D in ("Folder\Day_%%C.txt") do echo %%D
)
Algumas notas:
O lote trata todas as variáveis como strings, exceto quando se usa set / a .
O for /L
fará a contagem para você, sem necessidade de adição extra.
É fácil confundir a sintaxe de porcentagem dupla ( %%C
) necessária para o loop for
com a sintaxe de porcentagem única ( %1
) usada para acessar os argumentos passados para o script a partir da linha de comando. Apenas saiba que os argumentos da linha de comando somente usam a sintaxe de porcentagem única.
Não sei ao certo o que o segundo for
loop deveria estar fazendo. Você precisava de outra variável de loop lá ( %%D
) para funcionar. Eu suspeito que você esteja tentando produzir as linhas do arquivo Day_1.txt, Day_2.txt, etc., mas eu não acho que isso vai funcionar da maneira que está atualmente escrita, especialmente se você precisar criar o arquivo primeiro.
Editar em resposta ao comentário anexado à resposta de evianton:
Você não especificou que precisava de dois dígitos na sua pergunta original. O código abaixo (modificado de evianton) deve resolver esse problema.
@echo off
setlocal enabledelayedexpansion
for /l %%C in (1,1,31) do (
set num=%%C
if %%C lss 10 set num=0%%C
echo. >> "Folder\Day_!num!.txt"
)