У меня есть скрипт, который не работает:
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"
)