批处理文件中的条件语句

时间:2013-05-21 05:46:29

标签: batch-file

我编写了一个运行一系列命令的MS DOS批处理文件。

每个命令都会调用带有一些特定参数的程序。为了实现自动化,我将所有命令组合在一起。

批处理文件的结构如下所示:

@echo off
if %1 == "b1" (
command 1
command 2
command 3
....
) else (
command a
command b
command c
)

我调用它如下所示:

test.bat b1

如果我将b1作为参数传递给批处理文件,它将处理一系列命令,命令1,命令2,命令3等。

同样,如果我想执行else部分中提到的一系列命令,我会传递另一个参数:

test.bat abc

由于传递给批处理文件的参数不等于b1,因此它将开始执行批处理文件的else部分。这里我传递的参数(在本例中为abc)是命令,命令a,命令b,命令c等作为参数所必需的。

这一切都很好。

但是,我面临的问题是,如果我想在其间终止批处理文件(通过按Ctrl + C),它不会提示我选项:是否要终止批处理操作? Y / N

例如,假设批处理文件正在处理else部分中的一系列命令。目前,假设它正在执行命令a。如果按Ctrl + C,则不会提示我取消操作,而是取消执行命令a并自动继续执行命令b。如果我再次按Ctrl + C,它将取消命令b并继续执行命令c,依此类推。

另一方面,如果我按如下所示编写批处理文件:

@echo off
command a
command b
command c

我从命令行调用它:

test.bat abc

现在,当我在执行批处理文件时按Ctrl + C时,它会提示我按预期取消批处理操作。

当我在批处理文件中添加条件语句时,似乎以某种方式修改了Ctrl + C的功能。

如何解决此问题?

感谢。

1 个答案:

答案 0 :(得分:2)

我尝试了这个,它似乎按预期工作:

@echo off
if "x%1x" == "xb1x" (
    echo yes it is
    dir
    ...
) else (
    echo no it is not
    dir
    ...
)

(其中...重复前一对100次,让你有时间按 Ctrl - C )。我做了获取提示,即使在if ... else内发生了中断。

所以我怀疑你正在运行的命令有些不寻常,if行为是一个红色的鲱鱼。特别是,正如你所说他们正在启动程序,我希望 Ctrl - C 直接传递给正在运行的程序而不是启动它的批处理文件。