Eu tenho um script que não funciona:
set /a num=0
for /L %%C in (1,1,31) do (
set /a num+=1
set day=%num%
for /r %%1 in ("Folder\Day_%num%.txt") do echo %num%
)
Preciso que o número de 1 a 31 gerado em um loop seja uma variável de string que possa ser usada para criar um nome de arquivo. No meu caso há um problema ao usar tanto o parâmetro %%C quanto a variável numérica "num" para esta finalidade. Tentei definir uma variável string "dia" que mantém o número de interesse mas ainda não funciona não sei porquê. Por favor, ajude a consertar isso.
Responder1
não tenho certeza se entendi bem o que você realmente quer fazer, mas aqui está o código que irá criar para você arquivos vazios contendo o número solicitado no nome. Se não for a resposta que você procura, seja mais específico em sua solicitação.
FOR /L %%C IN (1,1,31) DO (
ECHO. >> "Folder\Day_%%C.txt"
)
NOTA: Certifique-se de que o diretório "Pasta" exista.
Responder2
Acho que você tornou o roteiro muito complicado. Experimente 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 usandodefinir /a.
Ele for /L
fará a contagem para você, não há necessidade de fazer adições extras.
É fácil confundir a sintaxe de porcentagem dupla ( %%C
) necessária para o for
loop com a sintaxe de porcentagem única ( %1
) usada para acessar argumentos passados ao script a partir da linha de comando. Esteja ciente de que argumentos de linha de comandoapenasuse a sintaxe de porcentagem única.
Não tenho certeza do que o segundo for
loop deveria estar fazendo. Você precisava de outra variável de loop aí ( %%D
) para funcionar. Suspeito que você esteja tentando gerar as linhas do arquivo Day_1.txt, Day_2.txt, etc., mas não acho que funcionará da maneira como está escrito atualmente, especialmente se você precisar criar o arquivo primeiro.
Edite em resposta ao comentário anexado à resposta de evianton:
Você não especificou que precisava de dias de dois dígitos em sua pergunta original. O código abaixo (modificado do 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"
)