use variável numérica para criar um nome de arquivo

use variável numérica para criar um nome de arquivo

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 /Lfará 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 forloop 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 forloop 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"  
)

informação relacionada