在for循环中使用多个do命令:将字符串输出到文件,然后重定向到命令窗口

12

我想编写一个批处理文件,以迭代执行Fortran编译的可执行文件。通常情况下,用户需要在Windows命令提示符中键入“Model.exe”,这将打开一个DOS命令窗口,要求用户在命令提示符下直接输入所需的文件名。

我想编写一个批处理文件来完成这一步骤,并迭代执行此步骤,以便我可以连续运行10个模拟,而不必手动进行。在Linux中,这种shell操作非常简单,但我没有可用的Linux。

我的伪代码如下:

for /L %%run in (1,1,10) do
(set str=Sim%%run
echo.%str% > input.txt
Model.exe < input.txt)

你可以将其分解为以下步骤:

  1. 变量“run”被赋值。(例如:1)
  2. 将此与字符串(“Sim”)连接起来以创建新变量“Sim1”
  3. 将此输出到文本文件(“input.txt”)
  4. 从文件“input.txt”中读取变量“Sim1”
  5. 可执行程序进行其操作。
  6. 重复步骤 1->5,但使用一个称为“Sim2”的新变量等。

如果我使用set str=Sim1,然后将其直接输出到“input.txt”,则可以使上述代码正常工作,但我无法将其用作循环。我错过了什么吗?

此致

Ben

1个回答

24

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,但我假设你有一个很好的原因来使用另一个变量。


1
@Ben 如果它起作用了,请考虑接受并最终点赞Gareth的答案。 - Dr. belisarius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接