批处理文件中的条件语句

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),它不会提示我选择:是否要终止批处理操作?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 的功能。

我该如何解决这个问题?

谢谢。


点击关闭窗口图标而不是按Control C。或者阅读CMD /?的帮助,看看是否可以更改Control C/Break的处理方式。使用start "" /b /w command1可能会起作用。 - foxidrive
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会直接传递给正在运行的程序,而不是传递给启动它的批处理文件。


谢谢。是的,看起来 Ctrl + C 被传递给了我在批处理文件中调用的程序,而不是提示我终止批处理操作。因此,这是特定于我正在运行的程序。 - Neon Flash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接