Подтвердить что ты не робот

Несколько команд do в цикле for: повторение строки в файле и последующее перенаправление в командное окно

Я пытаюсь написать пакетный файл, чтобы итеративно выполнить исполняемый файл fortran. Обычно можно перейти в командную строку Windows, введите "Model.exe". Это вызовет окно командной строки dos, в котором пользователь должен ввести нужное имя файла непосредственно в окно команд в приглашении dos.

Я хочу написать пакетный файл, который будет делать этот бит для меня, а также повторить этот шаг, чтобы я мог последовательно выполнять 10 симуляций, а не делать это вручную. Такая операция оболочки была бы простой в linux, но у меня ее нет.

Мой псевдо-код будет выглядеть так:

для/L %% выполняется в (1,1,10) do (set str = Sim %% run
echo.% str% > input.txt
Model.exe < input.txt)

Вы можете разбить это на следующие шаги:

  • Назначьте переменную "run" значение. (например, 1)
  • Объедините это со строкой ( "Сим" ), чтобы создать новую переменную "Sim1"
  • повторите это в текстовом файле ( "input.txt" )
  • Прочитайте переменную "Sim1" из файла "input.txt"
  • Исполняемый файл исчезает и выполняет свою работу.
  • Повторите шаги 1 → 5, но с новой переменной calle "Sim2" и т.д.

Я могу заставить это работать, если я использую set str = Sim1, а затем эхо-сигнал прямо на "input.txt" , но я не могу заставить это работать как цикл. Я что-то пропустил?

С уважением,

Бен

4b9b3361

Ответ 1

Ugh, cmd.exe обработка переменного расширения является уродливой. Итак, вам нужно "отсроченное расширение", как показано ниже:

setlocal enabledelayedexpansion
for /L %%i in (1,1,10) do (
set str=Sim%%i
echo !str! > input.txt
Model.exe < input.txt)
endlocal

(Конечно, в этом конкретном случае вы можете просто сказать echo Sim%%i > input.txt, но я предполагаю, что есть хорошая причина, по которой вы хотите перейти через другую переменную.)