本技巧继续有关使用批处理文件的系列。建议您(重新)访问前面的技巧,以便我们从上次停止的地方继续学习。到目前为止,我们已经介绍了以下命令:DIR,REM,ECHO,FIND,TIME和TIMEOUT。我们还使用了以下运算符:输出到文件(>),注释(::),无回显(@),管道(|)和连接(&)。

最后,我们知道我们使用了通过组合%1,%2,%3等传递给批处理文件的参数。

本技巧将重点介绍与在批处理文件中执行条件处理有关的命令。这些包括IF,CHOICE,GOTO和特殊的语法“:label”。

我有一个非常方便的批处理文件,名为Do.bat。它只不过是一个运行程序的“包装器”,而不管这些程序位于何处。

因此,例如,如果我想运行名为Prog1.exe的程序,则只需输入

C:\Bat> DO Prog1

如果我想运行Prog2.exe,我会输入

C:\Bat> DO Prog2

Do.bat的优点在于,当我创建它时,我输入了要使用它的所有程序的位置。因此,例如,我不必记住Prog1.exe位于“ C:\ Programs \ My Programs \ Prog1.exe”,而Prog2.exe位于“ D:\ Utilities \ Barry \ Prog2.exe” 。另外,我不必再键入那些长路径名。

我的Do.bat文件看起来像这样:

@ECHO OFF GOTO %1 :Prog1 "C:\Programs\My Programs\Prog1.exe"

GOTO Done

:Prog2 "D:\Utilities\Barry\Prog2.exe"

GOTO Done :Done

文件的第一行确保其他行不会显示。这之后是GOTO行,该行将要传输控件的标签的名称作为参数。碰巧这个标签也是开始传递给Do.bat的参数。因此,当您调用Do.bat并将“ Prog1”作为参数传递时,.bat文件会对名为“:Prog1”的标签执行GOTO操作(这些命令不区分大小写)。从上到下依次执行,因此下一个要执行的命令是调用Prog1.exe的命令。该程序完成后,.bat文件将通过执行“ GOTO Done”命令继续。 “:Done”标签是文件的最后一行,因此到达此点时,.bat文件将退出。 (有一个EXIT命令,但是如果执行该命令,它将不仅终止.bat文件,而且终止整个CMD会话,这可能不是您想要执行的操作。)

您可以选择使用CHOICE命令,还可以创建一个简单的菜单,从中选择要运行的程序。在这种情况下,我可以制作一个名为Choice.bat的文件,该文件应如下所示:

@ECHO OFF ECHO Select 1 to run Prog1 ECHO Select 2 to run Prog2 ECHO Select Q to quit CHOICE /C 12Q /T 10 /D Q GOTO %ERRORLEVEL% :3 ECHO Quitting GOTO Done :2 "D:\Utilities\Barry\Prog2.exe"

GOTO Done :1 "C:\Programs\My Programs\Prog1.exe"

GOTO Done :Done

CHOICE命令向用户提示输入1、2或Q(默认情况下,它不区分大小写)。其他任何字符都将被忽略。 / T开关说在10秒钟内超时,这时该过程的行为就像选择了Q选项一样(/ D Q表示Default选项是Q)。执行CHOICE命令后,将变量%ERRORLEVEL%设置为所选选项的顺序值。因此,如果用户选择1,则将%ERRORLEVEL%设置为1;如果用户选择2,则将%ERRORLEVEL%设置为2;如果用户选择了Q,则将%ERRORLEVEL%设置为3。然后转到%ERRORLEVEL%指示的标签,并执行请求的操作。

我可以在IF命令上写一个完整的技巧,但基础是您可以执行以下操作:

IF arg1 operator arg2 command

其中“ arg1”和“ arg2”是要测试的参数,“运算符”是EQU,NEQ,LSS,LEQ,GTR,GEQ(即EQUal,不等于,LeSS than等)之一,而“ command”是命令行命令。

如果有一个简单的批处理文件以回显P1,则可能看起来像这样:

@ECHO OFF IF [%1] EQU [] ECHO No Parameter passed IF [%1] NEQ [] ECHO Parameter P1 is '%1' GOTO:eof

(为了避免某些麻烦,我习惯在参数周围使用[]。)

IF还有其他味道。例如,您可以测试错误级别,测试文件是否存在,包括ELSE语句等。

在命令行上执行IF /吗?这样您就会对所能做的一切有所了解。

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