2

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

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". Я попытался установить строковую переменную "день", которая сохраняет интересующие вас числа, но все равно не работает, я не знаю почему. Пожалуйста, помогите исправить это.

2 ответа2

0

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

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

Пара заметок:

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

Для 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"  
)
0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .