按顺序执行代码块

时间:2016-06-04 10:11:23

标签: windows batch-file

我试图创建一个批处理脚本,逐行执行每个命令(不跳过可执行文件或编译进程然后回到它们)。 我尝试在可执行文件/编译命令之前使用StateTrigger命令,但它也不起作用。

我想要像

这样的东西
  

执行chunk1中的所有行然后继续chunk2

等等。 E.g。

start /wait

(上面列出的程序编译当前目录中的所有c源,将它们组合成一个exe,将exe移动到另一个文件夹然后执行它(exe))

1 个答案:

答案 0 :(得分:0)

默认情况下,批处理文件按顺序和同步执行。换句话说,执行每个命令,系统等待它完成,然后再继续下一个命令。

但是你也可以在批处理文件(GOTO)中前进和后退,并且可以按照你想要的顺序(CALL)执行特定的部分。如果您没有明确使用这些命令,批处理将按照编写的顺序执行。

例如,请考虑以下事项:

@echo off

Echo Line 1
Echo Line 2
Echo Line 3
Echo Line 4
Echo Line 5

这将按列出的顺序产生预期输出:

Line 1
Line 2
Line 3
Line 4
Line 5

您可以通过在批处理文件中放置标签(即以:开头的行)并使用CALL语句引用这些标记来更改执行顺序,以便只执行下面的命令标记:

@echo off
call :Line3
call :Line5

:Line1
Echo Line 1
Echo Line 2
goto :eof

:Line3
Echo Line 3
Echo Line 4
goto :eof

:Line5
Echo Line 5
goto :eof

这将产生以下输出:

Line 3
Line 4
Line 5
Line 1
Line 2

正如您所看到的,在每个部分的末尾,一个特殊的 goto:eof 指令告诉脚本停止处理任何进一步的命令,并在启动跳转的CALL之后立即将控制权返回给语句。 现在您可能想知道为什么 Line 1 Line 2 语句仍然显示,即使您从未明确调用它们。这是因为在 CALL:Line5 语句完成之后,无论如何都会执行下一个语句,因为正如我在开头所说,批处理文件总是默认顺序执行语句。接下来的那些陈述恰好是显示第1行第2行的陈述。

所以你有它:你现在知道如何按照你想要的顺序执行某个部分中的所有命令和另一个部分中的那些命令。