используйте числовую переменную для создания имени файла

используйте числовую переменную для создания имени файла

У меня есть скрипт, который не работает:

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%
        )

Мне нужно, чтобы число от 1 до 31, сгенерированное в цикле, было строковой переменной, которую можно было бы использовать для создания имени файла. В моем случае есть проблема с использованием как параметра %%C, так и числовой переменной "num" для этой цели. Я попытался установить строковую переменную "day", которая хранит интересующее меня число, но это все равно не работает, я не знаю почему. Пожалуйста, помогите это исправить.

решение1

Не уверен, что я правильно понял, что вы действительно хотите сделать, но вот код, который создаст для вас пустые файлы, содержащие запрошенный номер в имени. Если это не тот ответ, который вы ищете, пожалуйста, будьте более конкретны в своем запросе.

FOR /L %%C IN (1,1,31) DO (
    ECHO. >> "Folder\Day_%%C.txt"
)

ПРИМЕЧАНИЕ: Убедитесь, что каталог «Папка» существует.

решение2

Мне кажется, вы слишком усложнили сценарий. Попробуйте это:

for /L %%C in (1,1,31) do (
  for /r %1 %%D in ("Folder\Day_%%C.txt") do echo %%D
)

Пара замечаний:

Пакет обрабатывает все переменные как строки, за исключением случаев использованиянабор /а.

Он for /Lвыполнит подсчет за вас, нет необходимости делать дополнительные сложения.

Легко спутать двойной процентный синтаксис ( %%C), необходимый для forцикла, с одинарным процентным синтаксисом ( %1), используемым для доступа к аргументам, переданным скрипту из командной строки. Просто помните, что аргументы командной строкитолькоиспользуйте синтаксис с одним процентом.

Я не уверен, что forдолжен делать ваш второй цикл. Вам нужна была еще одна переменная цикла ( %%D), чтобы он работал. Я подозреваю, что вы пытаетесь вывести строки файла Day_1.txt, Day_2.txt и т. д., но я не думаю, что это будет работать так, как написано сейчас, особенно если вам нужно сначала создать файл.

Редактировать в ответ на комментарий, прикрепленный к ответу evianton:

Вы не указали, что вам нужны 2-значные дни в вашем исходном вопросе. Код ниже (измененный из evianton) должен решить эту проблему.

@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"  
)

Связанный контент