for循环中的多个do命令:将字符串回显到文件然后重定向到命令窗口
Posted
技术标签:
【中文标题】for循环中的多个do命令:将字符串回显到文件然后重定向到命令窗口【英文标题】:Multiple do commands in a for loop: Echoing a string to a file and then redirecting to the command window 【发布时间】:2011-07-03 20:28:03 【问题描述】:我正在尝试编写一个批处理文件来迭代地执行一个 fortran 编译的可执行文件。通常会转到 Windows 命令提示符,键入“Model.exe”。这将打开一个 dos 命令窗口,要求用户在 dos 提示符下直接在命令窗口中键入所需的文件名。
我想编写一个批处理文件来为我完成这一步,并重复这一步,这样我就可以连续运行 10 次模拟,而不必手动进行。这种 shell 操作在 linux 中很简单,但我没有。
我的伪代码如下所示:
for /L %%run in (1,1,10) do
(设置 str=Sim%%run
echo.%str% > input.txt
Model.exe
您可以将其分解为以下步骤:
-
为变量“运行”赋值。 (例如 1)
将其与字符串 ("Sim") 连接以创建一个新变量 "Sim1"
将此回显到文本文件(“input.txt”)
从文件“input.txt”中读取变量“Sim1”
可执行文件消失并做自己的事情。
重复步骤 1 -> 5,但使用新的变量调用“Sim2”等。
如果我使用 set str=Sim1 然后将其直接回显到“input.txt”,我可以使上述工作正常工作,但我无法将其作为循环工作。我错过了什么吗?
最好的问候,
本
【问题讨论】:
欢迎您来到 *** 并提醒我们通常在这里做的三件事:1) 当您获得帮助时,请尝试在您的专业领域回答问题 2)Read the FAQs
3)当你看到好的问答时,投票给他们using the gray triangles
,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。还记得接受更好地解决您的问题的答案,如果有的话,by pressing the checkmark sign
【参考方案1】:
呃,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
,但我认为您有充分的理由想要通过另一个变量。)
【讨论】:
@Ben 如果可行,请考虑接受并最终支持 Gareth 的回答。以上是关于for循环中的多个do命令:将字符串回显到文件然后重定向到命令窗口的主要内容,如果未能解决你的问题,请参考以下文章