如果您现在还没有猜到的话,批处理文件可以作为一种基本的编程语言。现代编程语言提供的一件事是能够将代码模块化成小块,这样,如果您更改了一块,就不会冒意外更改一些无关代码的风险。您可以通过将大型批处理文件分成较小的文件并使用CALL语句根据需要调用各个模块来对它们进行模块化。

让我们以菜单系统为例,该系统允许用户调用许多功能中的任何一个。我们要做的是将每个函数放在各自的批处理文件中,并在主菜单批处理文件中使用CALL语句来调用选定的函数,然后该函数将返回到菜单以允许用户选择另一个函数。

这是Menu.bat的样子:

@ECHO OFF :TOP CLS ECHO   Welcome to the Main Menu! Here are your choices...

ECHO.

ECHO A) Perform Function A          B) Perform Function B ECHO C) Perform Function C          D) Perform Function D ECHO.

ECHO Q) Quit ECHO.

CHOICE /C ABCDQ GOTO %ERRORLEVEL% :5 GOTO :EOF :4 CALL FuncD.bat GOTO TOP :3 CALL FuncC.bat GOTO TOP :2 CALL FuncB.bat GOTO TOP :1 CALL FuncA.bat GOTO TOP

这是FuncA.bat的样子:

ECHO This is Function A PAUSE

尽管这里没有发生任何有趣的事实,但这是基于命令的菜单系统的一个体面框架的开始。还有一些需要注意的事项。从上到下,我们遇到的第一个新命令是CLS命令。这个简单的命令只是清除屏幕上的内容,这样我们的菜单本身总是看起来很好。敏锐的眼光还会注意到一些ECHO声明,并在其后立即加上句号。这是您输出空白行的方式。另一个新项目是内置的:EOF标签。这样就不必声明自己的标签,该标签作为文件的最后一行存在(例如,我在其他技巧中使用的“:Done”标签)。

这将我们带到CALL语句。用CALL指定的参数是下一个要调用的批处理文件的名称。因此,例如,如果用户从菜单中选择选项A,则批处理文件将立即转到:1标签,这将导致接下来调用FuncA.bat。我的FuncA.bat文件只是回显一行并暂停。 PAUSE语句将导致输出一行,内容为“按任意键继续…​”。然后,它将暂停批处理文件的执行,直到用户按下某个键为止。一旦按下一个键,批处理文件就会继续进行,在这种情况下,这意味着FuncA.bat终止,并且控制会在调用FuncA.bat后的紧接行的主菜单批处理文件中恢复。因此,接下来要发生的就是GOTO TOP,它将重新开始一切。

请注意,您不必在FuncA.bat的顶部放置另一个“ @ECHO OFF”,因为在调用FuncA.bat时将保持ECHO状态。

本技巧(13187)适用于Windows 7、8和10。