3

我编写了一个运行一系列命令的 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),它不会提示我选择:你想终止批处理操作吗?是/否

例如,假设批处理文件正在处理 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 的功能以某种方式进行了修改。

我该如何解决这个问题?

谢谢。

4

1 回答 1

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直接传递给正在运行的程序,而不是传递给启动它的批处理文件。

于 2013-05-21T09:01:40.223 回答